../concurrency

并发

[[并发]]是一种同时处理很多事情的能力,并行是一种同时执行很多事情的手段

Concurrency is about dealing with lots of things at once. Parallelism is about doing lots of things at once.

处理并发得过程中,难点并不在于如何创建多个线程来分配工作,在于如何在这些并发的任务中进行同步

并发状态常见的工作模式

![[并发状态常见工作模式.png]]

自由竞争模式

多个并发任务会竞争同一个临界区的访问权。任务之间在何时、以何种方式去访问临界区是不确定的,或者说是最为灵活的,只要在进入临界区时获得独占访问即可。 实现:使用互斥锁来保护某个临界区,使进入临界区的任务有独占访问权限。 在自由竞争的基础上,可以限制并发的同步模式,典型的有map/reduce模式以及DAG模式:

map/reduce模式

把工作打散,按照相同的处理完成后,再按照一定的顺序将结果组织起来

DAG模式

把工作切成不相交的、有依赖关系的子任务,然后按依赖关系并发执行

三种模式组合起来,可以处理非常复杂的并发场景。因此当处理复杂网络的时候,应该先理清脉络,用分治的思想把问题拆解成正交的子问题,然后组合合适的并发模式来处理这些子问题。

并发原语

Atomic

所有并发原语基础,为并发任务的同步奠定坚实的基础。

Mutex

Condvar

Channel

Actor Model