最经典的两类并发模型

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qingyixiaoxia/article/details/80725374

最经典的两类并发模型

 

如需转载请注明出处:http://blog.csdn.net/qingyixiaoxia  微信号:qingyixiaoxia

1. 两类并发模型

并发的软件,最重要的问题之一是临界数据(尤其是静态数据)的访问。

临界数据访问有两种基本方式:

1)并行的互访临界数据;

2)串行的互访临界数据;

第一种方法需要考虑互斥问题,一般通过互斥锁实现。

第二种方法可以无需考虑互斥问题,通过对临界资源的Task化封装来实现。

由此,带出两类基本的并发模型,作者分别名之曰小白盒并发模型,和小黑盒并发模型。

两种模型对比示意如下:

如需转载请注明出处:http://blog.csdn.net/qingyixiaoxia  微信号:qingyixiaoxia

2. 小白盒并发模型

 

说明:

小白盒模型是各种并发模型的始祖和基础。大家在最初进行线程编程时,基本都是从小白盒模型开始的。

1)模型描述:

小白盒模型是在各个软件组件的实现过程中,在”需要的时候”,启动独立的线程。这些独立的线程在运行中,其调用轨迹可以贯穿所有的软件组件。所以每个软件组件都要考虑其临界资源可能被并发访问的问题。要解决这个问题,最简单的手段就是各种Mutex加解锁。

2)优缺点:

优点:该模型用来无需过多的并发设计上的思考,简单易懂。

缺点:该模型仅仅适用于小型软件。对大型软件,过多的锁会引入相应的软件复杂度,而过多锁的使用又会引入难以排查的效率瓶颈;

3)特别的:

并发设计中,除了互斥设计,还有线程间协作时序的设计。可以通过互斥锁来协调线程间时序关系,也可以通过条件变量等来协调线程间时序关系。

如需转载请注明出处:http://blog.csdn.net/qingyixiaoxia  微信号:qingyixiaoxia

3. 小黑盒并发模型

 

说明:

小黑盒模型有比较强的并发设计感,适用于大型的软件。

1)模型描述:

小黑盒并发模型是将不同的软件组件用task封装起来,各个软件组件之间限定不可以直接互调,只能以收发消息的方式来调用彼此。小黑盒模型本质上时一种简化版的进程同步模型。

2)优缺点:

优点:不同软件组件间不存在同步和互斥访问的问题。理论上,一个软件模块的某条运行路线中,永远不会直接调用到另外一个软件组件的方法,也永远不会直接访问到另外一个软件组件的数据。所以,理论上,可以做到不同软件组件的临界数据是被串行访问的,从而也就不需要繁琐的加解锁操作了。或者至少,某个软件组件无需考虑其持有的临界数据,可能被其他组件去并行访问的问题。

缺点:组件件通过繁琐的消息收发来通信。发送消息,等待回复,显然不比直接的API调用简单直观。加之消息队列等机制,会引入编程上和分析上额外的复杂度。搞不好也会带来一定的效率下降。

 

如需转载请注明出处:http://blog.csdn.net/qingyixiaoxia  微信号:qingyixiaoxia

猜你喜欢

转载自blog.csdn.net/qingyixiaoxia/article/details/80725374
今日推荐