我对并发有基本的概念,但是我对下面的架构感到困惑。我认为它是并发的,但我的同事认为它不是。架构如下:
我有多个机器人,它们将数据发布到各自的网关,还有另一个java服务监听网关。该服务创建一个新线程来侦听每个网关。
我的理解是服务正在执行并发执行,但我的同事说这不是并发的,因为并发涉及硬件共享。
如果有人能澄清或详细说明这个话题,我将不胜感激。
发布于 2016-05-26 05:40:28
我的理解是服务正在执行并发执行,但我的同事说这不是并发的,因为并发涉及硬件共享。
TL/博士:词语是模糊的。这就是我们有代码的原因。
“并发”只是指两件或两件以上的事情同时发生。当它应用于计算时,真正的并发性意味着两个或更多同时运行的执行线程,这需要单独的硬件。这当然可以是相同CPU的独立核心,也可以是同一机箱中的独立CPU,因此存在一定程度的共享硬件。但是,它也可以是不同机箱中的独立核心,例如在计算集群中,尽管这可能是您的同事的底线。然而,这样的线将是相当武断的。
相比之下,早在服务器普遍具有多个CPU (核心)之前,许多计算机系统就实现了这样或那样的多任务处理,通过操作系统为每个任务分配CPU时间片并将它们切换进来和切换出来,多个任务可以同时进行。所有现代通用操作系统仍然可以做到这一点。然而,在单核上,这只提供模拟的并发性,因为在任何给定的时刻,只有一个计算实际在进行中。
然而,您的同事确实有一个观点,即多个空间分布的机器人都在没有协调的情况下同时操作,这有点超出了人们通常所说的并发计算。当然,在通用的“同时”意义上,这样的机器人是并发操作的,但要将它们描述为参与并发计算有点牵强。
因此,分配单独线程来处理与每个机器人的通信的服务器可以执行并发计算。但是,只要我们是在吹毛求疵,一定要认识到通过单个网络接口的通信是串行化的,所以除非您的服务器有多个网络接口,否则实际的通信不可能是真正的并发。如果服务器主要只是在数据到达时记录数据,而不是将其合并到正在进行的并发计算中,那么将其描述为执行并发操作可能会产生误导。
发布于 2016-05-26 05:28:25
即使按照您同事的定义,这也是一个并发系统,因为有多个线程在服务所在的硬件上执行。
https://stackoverflow.com/questions/37447448
复制相似问题