课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
并发编程开发是目前大多数程序员都在学习的一种编程开发技术,而今天我们就通过案例分析来了解一下,并发编程开发常用并发模型都有哪些类型。
一、并行Worker
并行worker的核心思想是,它主要有两个进程即代理人和工人,Delegator负责接收来自客户端的任务并把任务下发,交给具体的Worker进行处理,Worker处理完成后把结果返回给Delegator,在Delegator接收到Worker处理的结果后对其进行汇总,然后交给客户端。
并行Worker模型是Java并发模型中非常常见的一种模型。许多java.util.concurrent包下的并发工具都使用了这种模型。
1、并行Worker的优点
并行Worker模型的一个非常明显的特点就是很容易理解,为了提高系统的并行度你可以增加多个Worker完成任务。
并行Worker模型的另外一个好处就是,它会将一个任务拆分成多个小任务,并发执行,Delegator在接受到Worker的处理结果后就会返回给Client,整个Worker->Delegator->Client的过程是异步的。
2、并行Worker的缺点
同样的,并行Worker模式同样会有一些隐藏的缺点。
二、流水线
这种组织架构就像是工厂中装配线中的worker,每个worker只完成全部工作的一部分,完成一部分后,worker会将工作转发给下一个worker。
每道程序都在自己的线程中运行,彼此之间不会共享状态,这种模型也被称为无共享并发模型。
1、流水线设计的优点
与并行设计模型相比,流水线模型具有一些优势,具体优势如下
不会存在共享状态
因为流水线设计能够保证worker在处理完成后再传递给下一个worker,所以worker与worker之间不需要共享任何状态,也就无需考虑并发问题。你甚至可以在实现上把每个worker看成是单线程的一种。
有状态worker
因为worker知道没有其他线程修改自身的数据,所以流水线设计中的worker是有状态的,有状态的意思是他们可以将需要操作的数据保留在内存中,有状态通常比无状态更快。
更好的硬件整合
因为你可以把流水线看成是单线程的,而单线程的工作优势在于它能够和硬件的工作方式相同。因为有状态的worker通常在CPU中缓存数据,这样可以更快地访问缓存的数据。
使任务更加有效的进行
可以对流水线并发模型中的任务进行排序,一般用来日志的写入和恢复。
2、流水线设计的缺点
流水线并发模型的缺点是任务会涉及多个worker,因此可能会分散在项目代码的多个类中。因此很难确定每个worker都在执行哪个任务。流水线的代码编写也比较困难,设计许多嵌套回调处理程序的代码通常被称为回调地狱。回调地狱很难追踪debug。
三、函数性并行
函数性并行模型是近才提出的一种并发模型,它的基本思路是使用函数调用来实现。消息的传递就相当于是函数的调用。传递给函数的参数都会被拷贝,因此在函数之外的任何实体都无法操纵函数内的数据。这使得函数执行类似于原子操作。每个函数调用都可以独立于任何其他函数调用执行。
当每个函数调用独立执行时,每个函数都可以在单独的CPU上执行。这也就是说,函数式并行并行相当于是各个CPU单独执行各自的任务。
【免责声明】:本内容转载于网络,转载目的在于传递信息。文章内容为作者个人意见,本平台对文中陈述、观点保持中立,不对所包含内容的准确性、可靠性与完整性提供形式地保证。请读者仅作参考。更多内容请在707945861群中学习了解。