并发并行,同步异步,阻塞非阻塞的小总结

这些操作系统上的一些名词,理解起来还是得要用文字加举例来说明才够形象。

并发&并行

并行和并发的关注点是 cpu的数量

并发

  1. 并发指的是一个cpu中,一个cpu“同时”运行多个进程,进程在一个cpu中,根据调度算法,轮流运行而达到“同时”的效果;
  2. 并发偏重于多个任务交替执行,任务可能会串行,是逻辑上的同时发生;但多个进程指令被快速的轮换执行,使得宏观上具有多个进程同时执行的效果,但是微观上并不是同时执行,只是把时间分成若干段,使得多个进程快速交替的执行;
  3. 并发并不需要多核处理器

”同时“ 其实只是宏观的感知,因为cpu的运行速度太快了,在cpu在多个进程中切换很快,运行也很快,所以会达到一种宏观的同时的效果,其实是轮流执行的,一个cpu同一个时刻,只能做一件事情;

例子:在餐馆中,其他厨师都请假了,现在只有一个厨师,同时有多个不同的外卖订单,都特别急;
所以呢,厨师就需要同时做,分别在多个锅里做菜,从而完成外卖订单,当然订单完成有先后,有的快一些有的慢一些;

更直接的例子:一个人吃三个包子;

并行

  1. 并行指的是多个cpu中或者多核cpu,同时运行多个进程,多个进程在多个cpu中,根据调度算法,同时进行;
  2. 并行偏重于多个任务同时执行,是物理上的同时发生。是多个任务真实的同时执行。
  3. 并行需要多核处理器

例子:在餐馆中,有5个厨师,现在有5个订单,然后呢,5个外卖订单同时来;那5个厨师可以分别在5个锅里面,同时做其中一个订单;

更直接的例子:三个人吃三个包子;

同步&异步

同步和异步的关注点是 消息通信机制,通知 或 不通知

同步

  1. 当你执行一个任务,等待着这个任务的处理结果时,这个任务 不提供 结束时的通知服务,则是同步;

异步

  1. 当你执行一个任务,等待着这个任务的处理结果时,这个任务 提供 结束时的通知服务,则是异步;

阻塞&非阻塞

阻塞和非阻塞的关注点是 等待结果时的状态 可用 或 不可用

阻塞

  1. 当你在执行一个任务,等待这个任务的处理结果时,你 不可以 做别的任务,则为阻塞

非阻塞

  1. 当你在执行一个任务,等待这个任务的处理结果时,你 可以 做别的任务,则为非阻塞

组合

我习惯把上面的情况做组合,一起举例,这样感觉更合适

同步阻塞

你给你朋友打电话,因为你不知道朋友什么时候接,在朋友接电话之前,你不做任何事情,只是等着;

  • 同步:朋友没有给你提供通知服务
  • 阻塞:朋友没接电话前只是等着

同步不阻塞

你给你朋友打电话,因为不知道朋友什么时候接,在朋友接电话前,觉得很无聊,然后脖子夹着电话,找来指甲钳剪指甲

  • 同步:朋友没有给你提供通服务
  • 不阻塞:你一边打着电话,一遍剪指甲

异步阻塞

你给你朋友打电话,直接听到是留言信箱,说一会给你回电话,你挂掉电话后,然后等着朋友回电话;

  • 异步: 朋友一会回电话,属于通知
  • 阻塞:等着朋友回电话;

异步不阻塞

你给你朋友打电话,直接接到是留言信箱,说一会给你回电话,你挂掉电话后;找来指甲钳剪指甲

  • 异步:朋友一会回电话,属于通知
  • 不阻塞:一边等朋友电话,一遍剪指甲

参考资料:

  1. 彻底搞清 同步,异步,阻塞,非阻塞的概念性知识