进程内的执行体有线程和协程,这两类执行体的协同机制概要如下:
1.原子操作
cup提供的能力,与操作系统无关。这里列上只是为了让你能够看到进程内通讯的全貌。
原子操作的每一个操作都是原子的,不会中途被人打断,这个原子性是 CPU 保证的,与执行体的种类无关,无论 goroutine 还是操作系统线程都适用。从语义上来说,原子操作可以用互斥体来实现,只不过原子操作要快得多。
2.执行体的互斥
锁就是共享的内存。
3.执行体同步
条件变量是最复杂的同步原语。有更高阶的原语-管道可以替代。
而操作系统课本还是那个的信号量这样的同步原语,这里没有交代,是因为被性能更好更强大的同步原语条件变量替代了。
4.执行体通讯
下期,我们将讨论进程与进程之间的协同:进程间的同步互斥、资源共享与通讯。