『阿男教你玩Concurrent Programming』*学习的脉络(1)*
大家觉得并发编程学习起来很难,其实这块主要是知识体系比较庞大,设计比较多,理论学习比较漫长,找到一个学习的脉络,学习起来就不难。阿男这里给大家先梳理一下。
首先我们要明白并发编程要解决什么问题。所谓并发
,本质上就是指,同时有多个worker
在工作,这些workers
可能在做同一个task
,也可能在做不同的task
。此外,如果是多个tasks
,那么这些tasks
,可能相互之间有关联,也可能没有关联。
那么我们把上面所说的场景详细划分一下。首先是最简单的,一个worker
,一个task
,这种就谈不上并发
了,就是一个线性的一个人的独立工作。这个就没什么可讲的。
接下来是多个workers
,做多个tasks
,但是多个tasks
之间毫无关联,这个也没什么可讲的,就相当于各个worker
做各自手里毫不相关的task
,一个个都是孤岛,那么也和之前一个worker
,一个task
本质上是一样的。就算是每个worker
手里有多个tasks
,如果worker
手里的task
互相不相关,那也是一样的情况。
最后一种情况是我们要考虑的,其实是两种情况,就是多个workers
对应一个task
,或者对应多个tasks
,但是多个tasks
之间有关联性。
这两种情况涉及到两个问题:第一个问题,多个workers
之间如何协调执行顺序?如果执行顺序错误,很可能任务失败,这里面涉及到任务本身的逻辑。
第二个问题是,多个workers
之间如何不冲突地使用资源?因为多个workers
可能在执行一个任务,这个任务里面涉及的到的资源是共享的,而这些资源可能不能同时交给多个workers
去使用,否则可能会产生逻辑错误。还有就是如果多个tasks
之间有关联性,那么它们的资源也可能有关联性,可能在使用方面也是有顺序性和独占性。
因为,并发编程所有的理论,实现,设计模型,就是要解决这两个问题:协调并发执行循序
,协调资源的使用
。