CSP & Actor Model
本文将简单介绍CSP和Actor模型俩流行的并发机制,并比较他们的优缺点,并通过Golang中CSP并发机制实现FutureTask.并行机制有很多像是多线程,CSP,Actor等等.拿多线程来说,就有诸多问题,譬如:死锁,可扩展性差,共享状态.就像共享状态会产生很多问题,它涉及到内存的变化。只有一个进程发生变化没问题。但如果有多个进程共享和修改相同的数据,这将非常糟糕.为解决这些问题,提出了很多解决方法呢.比如,CSP和ActorModel.
如下是一些编程语言,以及它们相应的并发机制:
- Actors Model — Erlang, Scala, Rust
- CSP — Go-lang
- 多线程 — Java, C#, C++
CSP
CSP(Communicating Sequential Processes)是依赖于一个通道channel完成两个通信实体之间协调的并发模型。它基于不共享内存的消息传递.
Go语言哲学就是不通过共享内存进行通信;而是,通过通信进行共享内存。
go语言中的unbuffered Channel:
- 当在程序代码内丢了一个值到 channel,这时候 main 函数就需要等到一个 channel 值被读出来才会结束.
BufferedChannel:
- buffered channel 就是只要有容量,你都可以塞值进去