不懂并行和并发?一文彻底搞懂并行和并发的区别( 三 )

看图非常容易理解:

不懂并行和并发?一文彻底搞懂并行和并发的区别

文章插图
 
上图中将一个任务中的三个步骤取柴、运柴、卸柴划分成了独立的小任务 , 有取柴的老鼠 , 有运柴的老鼠 , 有卸柴烧火的老鼠 。
如果上图中所有的老鼠都是同一只 , 那么是串行并发的 , 如果是不同的多只老鼠 , 那么是并行并发的 。
总结并行和串行:
串行:一次只能取得一个任务并执行这一个任务
并行:可以同时通过多进程/多线程的方式取得多个任务 , 并以多进程或多线程的方式同时执行这些任务
注意点:
  • 如果是单进程/单线程的并行 , 那么效率比串行更差
  • 如果只有单核cpu , 多进程并行并没有提高效率
  • 从任务队列上看 , 由于同时从队列中取得多个任务并执行 , 相当于将一个长任务队列变成了短队列
并发:
并发是一种现象:同时运行多个程序或多个任务需要被处理的现象
这些任务可能是并行执行的 , 也可能是串行执行的 , 和CPU核心数无关 , 是操作系统进程调度和CPU上下文切换达到的结果
解决大并发的一个思路是将大任务分解成多个小任务:
  • 可能要使用一些数据结构来避免切分成多个小任务带来的问题
  • 可以多进程/多线程并行的方式去执行这些小任务达到高效率
  • 或者以单进程/单线程配合多路复用执行这些小任务来达到高效率




推荐阅读