吃饭和打电话你选择哪个?

举个栗子

  • 你在吃饭,电话进来,你等到吃完了才接电话 –> 你不支持【并行或者并发】

(1个CPU,队列式执行任务,这个做完了才做下一个,不允许插队)

  • 你在吃饭,电话进来,接一下电话,吃一下饭,交替进行,说明你支持【并发】

(一个CPU,多个任务同时进行,这个做一下,那个做一下,回过来这个再做一下…,允许插队)

  • 你在吃饭,电话进来,你继续吃饭,秘书帮你接电话,说明你支持【并行】

(多于一个CPU,多个任务同时进行,各忙各的)

>_

1

正儿八经的胡说一下

并发主要是指:同一时间 【段】 “同时"做多件事

比如一边打电话一边吃饭。人脑肯定是没法同时专注在两个事情上的,所以你的注意力会一下在电话上(听电话里说什么),一下在吃饭上(大脑下达抬手张嘴咀嚼的指令),CPU也是如此。

吃饭一个线程,接电话一个线程。分给吃饭线程一点时间片,分给接电话一点时间片,吃饭的时间片执行完了切到电话线程执行,电话线程的时间片执行完了切到吃饭线程,因为切换的快,所以感觉像同时进行。

这里时间片不懂的话就姑且理解为能量条,CPU切过来执行吃饭线程,吃饭线程的能量条就开始消耗,消耗完了CPU就走了去消耗电话线程的能量条了。与此同时吃饭线程的能量条在CPU切走的时候瞬间满了,CPU那边消耗完了又过来吃饭线程消耗这边的能量条,耗完了又走了。如此往复直到任务执行完毕。

并行只要是指:同一时间 【点】 “同时"做多件事

还是上面吃饭打电话的例子,电话来了你吃你的,电话秘书帮你接。你处理吃饭的事情,秘书处理电话的事情,所以就不用CPU切来切去的。因为有两个CPU了嘛(你 和 秘书)。

总结

  • 一个收银员,只能排一条队伍,一个一个来,就是不支持并发并行

  • 一个收银员,可以排多条队伍,这边忙忙那边忙忙,就是支持并发

  • 多个收银员,可以排多条队伍,一个收银员处理一条队伍,就是支持并行

可见CPU只有一个的时候,就是假同时;多个CPU的时候,才是真正意义上的同时。