这两个名词一定很多人听过,会不会有人理所当然的把这两个名词当成一个意思,其实这两者有着本质上的区别。
用工作中开发来举个例子吧。
并发
同一时间有两个需求,需求A和B分配到了你的手上,而且这两个需求都很急,你为这两个需求分别开了两个分支A和B,一会儿需求A催你改代码,你切到了A的分支,一会儿B催你改代码,你又切到了需求B,你是一个人但是你具有处理并发事件的能力,在两个需求之间来回穿梭。
那么并行又是怎么样的呢?
并行
同一事件有两个需求,同样也很急,但是这个时候你不是一个人在战斗了,你有了新同事;需求A分配给了你,需求B分配了你的新同事,那么你就不用再去关心需求B做了什么,两个人分别处理各自在自己的分支上做需求。
最后说说串行,又来了一位新同事,但是是个实习生,你分配了两个很简单的任务A和B给他,但是他对切分支这个操作很陌生,他只能在做完了A任务后,才新开了一个分支B去做B任务。
画图理解
以前只有一个柜台可以买东西,有两个队伍,一会儿处理这个队伍,一会儿处理那个队伍叫并发。
现在有两柜台了,我只处理我这个队伍中的人就好了,叫并行。
最后引用深入理解计算机系统CSAPP的回答
并发(Concurrency)是说进程B的开始时间是在进程A的开始时间与结束时间之间,我们就说A和B是并发的。
并行(Parallel Execution)是并发的真子集,指同一时间两个进程运行在不同的机器上或者同一个机器不同的核心上。
总结
- 并发是一个人做多件事,来回切换。
- 并行是多个人做多件事,互不干涉。
参考资料
文章中出现的任何错误欢迎指正,共同进步!
最后做个小小广告,有对WEB开发和网络安全感兴趣的,可以加群一起学习和交流!
QQ:425343603