两类并发模型
如需转载请注明出处:http://blog.csdn.net/qingyixiaoxia
一 两类并发模型
并发的各个任务之间协作的方式有两种:
第一种,并发任务对彼此成开放的白盒状态,可以通过直接的调用,来访问彼此的数据或者方法;
第二种,并发任务对彼此成封闭的黑盒状态,彼此只能通过消息交互,来触发对数据或方法的使用;
这第二种任务协作模式下,对隶属于各个并发任务的临界数据,它们的访问也被消息封装给串行化了,从而可免于考虑互斥问题。
注意:对未经消息封装保护的公共的临界数据,其多任务访问依然是并发的,依然需要互斥保护。
对两种并发任务协作模型,作者分别名之曰小白盒并发模型,和小黑盒并发模型。
两种模型对比示意如下:
二 小白盒并发模型
说明:
小白盒模型是各种并发模型的始祖和基础。大家在最初进行线程编程时,基本都是从小白盒模型开始的。
1. 模型描述:
小白盒模型是在各个软件组件的实现过程中,在”需要的时候”,启动独立的线程。这些独立的线程在运行中,其调用轨迹可以贯穿所有的软件组件。所以每个软件组件都要考虑其临界资源可能被并发访问的问题。要解决这个问题,最惯常的手段就是Mutex加解锁。
2. 优缺点:
优点:该模型用来无需过多的并发设计上的思考,简单易懂。
缺点:该模型仅仅适用于小型软件。对大型软件,过多的锁会引入相应的软件复杂度,而过多锁的使用又会引入难以排查的效率瓶颈;
3. 特别的:
并发设计中,除了互斥设计,还有线程间协作时序的设计。可以通过互斥锁来协调线程间时序关系,也可以通过条件变量等来协调线程间时序关系。
三 小黑盒并发模型
说明:
小黑盒模型有比较强的并发设计感,适用于大型的软件。
1. 模型描述:
小黑盒并发模型是将不同的软件组件用task封装起来,各个软件组件之间限定不可以直接互调,只能以收发消息的方式来调用彼此。小黑盒模型本质上时一种简化版的进程同步模型。
2. 优缺点:
优点:不同软件组件间不存在同步和互斥访问的问题。理论上,一个软件模块的某条运行路线中,永远不会直接调用到另外一个软件组件的方法,也永远不会直接访问到另外一个软件组件的数据。所以,理论上,可以做到不同软件组件的临界数据是被串行访问的,从而也就不需要繁琐的加解锁操作了。或者至少,某个软件组件无需考虑其持有的临界数据,可能被其他组件去并行访问的问题。
缺点:组件件通过繁琐的消息收发来通信。发送消息,等待回复,显然不比直接的API调用简单直观。加之消息队列等机制,会引入编程上和分析上额外的复杂度。搞不好也会带来一定的效率下降。
如需转载请注明出处:http://blog.csdn.net/qingyixiaoxia