有两类程序员几乎不出 多线程 bug:一类是啥也不懂,只要涉及到多 线程 就直接上锁;另一类熟读内存模型、体系结构、缓存一致性协议、内存屏障、竞态条件、指令重排……然后决定只要涉及到 多线程 就直接上锁。
“Concurrency is about dealing with lots of things at once.
Parallelism is about doing lots of things at once” – Rob Pike
Concurrency is about how you write programs, about being able to compose independently executing control flows, whether you call them processes or threads or goroutines, so that your program can be dealing with lots of things at once without turning into a giant mess. On the other hand, parallelism is about how you execute programs, allowing multiple computations to run simultaneously, so that your program can be doing lots of things at once efficiently. —Russ Cox
Concurrency
- To overlap disk O requests
- To reduce latency by prefetching results to expected queries
- To take advantage of multiple processors.
Parallelism
Multi process.
Asynchronous
Concurrency is having two tasks run in parallel on separate threads. However, asynchronous run in parallel but on the same thread.