并发和并行的区别

并发(现象):指的是同一时刻同时处理多个任务。

并行:指的是同一时间同时处理多个任务。

它们虽然都说是"多个进程同时运行",但是它们的"同时"不是一个概念。并行的"同时"是同一时刻可以多个进程在运行(处于running),并发的"同时"是经过上下文快速切换,使得看上去多个进程同时都在运行的现象,是一种OS欺骗用户的现象

总结

并行和串行:

  • 串行:一次只能取得一个任务并执行这一个任务

  • 并行:可以同时通过多进程/多线程的方式取得多个任务,并以多进程或多线程的方式同时执行这些任务

  • 注意点:

    • 如果是单进程/单线程的并行,那么效率比串行更差
    • 如果只有单核cpu,多进程并行并没有提高效率
    • 从任务队列上看,由于同时从队列中取得多个任务并执行,相当于将一个长任务队列变成了短队列

并发:

  • 并发是一种现象:同时运行多个程序或多个任务需要被处理的现象

  • 这些任务可能是并行执行的,也可能是串行执行的,和CPU核心数无关,是操作系统进程调度和CPU上下文切换达到的结果

  • 解决大并发的一个思路是将大任务分解成多个小任务:

    • 可能要使用一些数据结构来避免切分成多个小任务带来的问题
    • 可以多进程/多线程并行的方式去执行这些小任务达到高效率
    • 或者以单进程/单线程配合多路复用执行这些小任务来达到高效率