很早的一个视频了, Rob Pike 演讲视频 《Concurrency Is Not Parallelism》。
Rob Pike 演讲视频: ‘Concurrency Is Not Parallelism’ — 一句话:并发更加复杂,更加优秀。(Go的并发可以利用多核&并行)
Don’t communicate by shared memory. Instead, share memory by communicating. —— Rob Pike
很长的一段事件,我没有理解这句话。听了他的演讲,大致明白了:
Goroutine 奉行通过通信来共享内存,而不是共享内存来通信。
因为 go 底层帮你封装了这些细节(十几个goroutines 可能对应4-5个线程,整体上是一个大的线程池),使得你可以不必在关心这些细节。(你要合作 & 竞争,那么直接通过 chan 通信即可,通信的过程中,自动使用了共享内存,锁等等这些等机制)
Go语言层面上也简化并发编程了难度,goroutines封装了原来需要同步,协作等线程问题。
你可以不必再关心线程,只用关心任务执行体,或者相应的工作即可
(实际上这么说恐怕不准确,因为多核执行的时候也有可能存在震荡,需要绑定线程)
进一步的深入探究,可以参考我的这篇文章: 《Golang: 深入探究 Golang 并发》。
Merlin 2018.3 听 Golang 现在的负责人谈 golang 并发