Rob Pike - ‘Concurrency Is Not Parallelism’
Concurrency is dealing lots of things at once
Parallelism is doing lots of things at once
Not the same, but related
One is about structure and one is about execution
Concurrency is not parallelism, although it enables parallelism.
If you have only one processor, your program can still be concurrent but it cannot be parallel.
On the other hand, a well-written concurrent program might run efficiently in parallel on a multiprocessor. That property could be important...
大师就是大师,非常的精辟, 同事感觉到毕竟计算机科学是以英语为母语发展的科学,“doing” and “dealing”太传神了。
我自己的理解:
(1), 例如在多进程模式,就是一种并发, 在单CPU的系统上没有并行但是并发的程序。而且多进程开启了并行的可能,在多核的处理器上即可以并行执行。
即使在单处理器上,并发的程序也能带来良好的结构,并且可以最大限度的利用系统的CPU和IO,达到处理器的高使用率。这也是非常重要的指标,在国内
一线互联网企业的处理器的利用率,只能达到20%以下,当然并不是由于非并发的程序结构导致,而主要是由于一台服务器只能用来部署单个服务导致。这是
云计算和容器等虚拟化技术要解决的问题。
(2), 事件驱动模型(基于linux epoll ,BSD kqueue IO复用模型),解决单台机器的C10K问题,是的单台服务器能够处理的并发连接达到很高的水平。
当然这只是并发,而不是并行,只是能够接受大规模的链接,处理连接的能力是固定的(即每秒处理多少连接数量,这依赖于服务器的绝对性能,和网络带宽)。实际上 在某一时刻活动连接可能是只是非常小的,事件驱动模型就用最小的性能开销解决了大规模并发的问题,但是这也是在某一时间deal 多少的链接,而不是do多少的链接。