今天天气很不错,温度20左右,春风习习,阳光明媚,如果能够出去踏青肯定是再好不过,天不遂人愿,苦逼的搬砖。
简短概括,更为详细内容请看上述链接。
并发模型与分布式系统的相似性:
在并发系统中,不同线程相互通信。在分布式系统中,不同进程相互通信(可能在不同计算机上)。线程和进程在本质上是非常相似的。这就是为什么不同的并发模型常常看起来类似于不同的分布式系统体系结构。
几种并发模型:
-
Parallel Workers(并行工作者模式)
在并行工作者并发模型中,委托者将传入的工作分配给不同的工作者。每个工人完成全部工作。工人们并行工作,在不同的线程中运行,并且可能在不同的CPU上运行。
优点:易于理解;要提高应用程序的并行性,只需添加更多的工作人员。
缺点:共享数据会很复杂;每个工作者对共享数据内存不可见;工作队列的无序性。 -
Assembly Line(流水线模式或反应系统或事件驱动系统)
工作者像流水线工人一样,只负责自己的工作,工作完成转发给下一个工人。都在各自线程运行,不共享任何状态。
优点:不共享数据;更好的硬件整合;作业排序是可能的。
缺点:- 作业的执行通常分散在多个工作人员中,因此分散在项目中的多个类中。因此,很难准确地看到给定作业正在执行什么代码。
- 具有许多嵌套回调处理程序的代码可能会导致一些开发人员称之为回调地狱的结果。
什么叫做 更好的硬件整合
单线程代码的优点在于,它经常更好地符合底层硬件的工作方式。
首先,当您假定代码是在单线程模式下执行时,通常可以创建更优化的数据结构和算法。
第二,单线程状态工作器可以在内存中缓存数据。如上所述。当数据被高速缓存在存储器中时,该数据很大概率也被高速缓存在执行线程的CPU的高速缓存中。这使得访问缓存数据的速度更快。
当代码的编写方式自然受益于底层硬件的工作方式时,称之为硬件一致性。一些开发人员称之为机械同情。我更喜欢硬件整合这个词,因为计算机只有很少的机械部件,在这个上下文中,“同情”这个词被用作“匹配更好”的隐喻,我相信“整合”这个词传达得相当好。不管怎样,这是挑剔。使用你喜欢的任何术语。
哪一种并发模型更好
通常情况,取决于您的系统应该做什么。
如果您的作业自然是并行的、独立的并且不需要共享状态,那么您可能能够使用并行工作器模型来实现您的系统。
但如果许多工作并不是自然平行和独立的。对于这些类型的系统,我认为流水线并发模型优于并行工作模型。
您甚至不必自己编写所有装配线基础结构代码。像Vert.x
这样的现代平台已经为您实现了很多这样的功能。
网友评论