我对并发有基本的想法,但我对以下架构感到困惑。我认为这是并发的,但我的同事认为不是。架构如下:
我有多个机器人将其数据发布到其各自的网关,还有另一个在网关上侦听的java服务。该服务创建一个新线程来监听每个网关。
我的理解是该服务正在执行并发执行,但我的同事说这不是并发的,因为并发涉及共享硬件。
感谢某人是否可以澄清或详细阐述这一主题。
答案 0 :(得分:2)
我的理解是该服务正在执行并发执行,但我的同事说这不是并发的,因为并发涉及共享硬件。
TL / DR :言语湿软。这就是为什么我们有代码。
"并行"只是意味着同时发生了两件或两件以上的事情。因为它适用于计算,真正的并发意味着同时运行两个或多个执行线程,这需要单独的硬件。当然可以是相同CPU的独立内核或同一机箱中的独立CPU,因此存在一定程度的共享硬件。它也可以是不同机箱中的单独核心,但是,例如在计算集群中,尽管这可能是您的同事正在绘制他的线路的地方。不过,这样的一条线很随意。
相比之下,很久以前,即使服务器通常具有多个CPU(核心),许多计算机系统实现了一种或另一种多任务,因此多个任务都可以在同时凭借操作系统为每个操作系统分配CPU时间片并将其切换进出。所有现代通用操作系统仍然这样做。但是,在单核上,这只提供了模拟并发,因为在任何给定的时刻,只有一个计算实际上正在取得进展。
但是,您的同事确实有一点,即多个空间分布的机器人在没有协调的情况下同时运行,这有点超出了人们在谈论并发计算时通常的意思。当然,这些机器人同时运行,同时具有"同时",但它有点延伸,以表征它们参与并发计算
分配单独线程以处理与每个机器人的通信的服务器因此可以执行并发计算。但只要我们分裂头发,就要认识到通过单个网络接口的通信是序列化的,所以除非你的服务器有多个网络接口,否则实际的通信不能真正并发。如果服务器主要只是在数据到达时记录数据,而不是将数据合并到正在进行的并发计算中,那么将其描述为执行并发操作可能会产生误导。
答案 1 :(得分:0)
即使按照同事的定义,这也是一个并发系统,因为服务所在的硬件上有多个线程正在执行。