1. 并发编程的两个关键问题
并发是让多个线程同时执行,若线程之间是独立的,那并发实现起来很简单,各自执行各自的就行;但往往多条线程之间需要共享数据,此时在并发编程过程中就不可避免要考虑两个问题:通信 与 同步。
通信
通信是指消息在两条线程之间传递。
既然要传递消息,那接收线程 和 发送线程之间必须要有个先后关系,此时就需要用到同步。通信和同步是相辅相成的。同步
同步是指,控制多条线程之间的执行次序。
2. 通信的方式
2.1 通信方式的种类
线程之间的通信一共有两种方式:共享内存 和 消息传递。
- 共享内存
共享内存指的是多条线程共享同一片内存,发送者将消息写入内存,接收者从内存中读取消息,从而实现了消息的传递。
但这种方式有个弊端,即需要程序员来控制线程的同步,即线程的执行次序。
这种方式并没有真正地实现消息传递,只是从结果上来看就像是将消息从一条线程传递到了另一条线程。
- 消息传递
顾名思义,消息传递指的是发送线程直接将消息传递给接收线程。
由于执行次序由并发机制完成,因此不需要程序员添加额外的同步机制,但需要声明消息发送和接收的代码。
综上所述:对于共享内存的通信方式,需要进行显示的同步,隐式的通信;