关于异步(async)IO和非阻塞(non-blocking)IO

今天看到有个人在某论坛问:异步IO是不是就是非阻塞IO,非阻塞IO是不是就是异步IO?
答案当然是否定的。
依稀记得之前看到过有个人比喻的很形象,你去相关部分盖个章:

  • 同步+阻塞:你必须在窗口等着,等人来办完了才能走
  • 同步+非阻塞:你可以出去转转或者干别的,人来了办完再走
  • 异步+非阻塞:你把材料留下然后回家做其他事情,他们盖完章快递给你
  • 异步+阻塞:你把材料留下,然后必须等着,他们盖完章快递给你

本质上,同步异步描述的是调用时序上的事情,跟阻塞不阻塞是没有关系的。
下面的图表示了同步和异步的区别:
sync-and-async

附言:Linux中epoll解决的是阻不阻塞的问题,而不是同步异步的问题,它只是通知你,你做XX事情不会被阻塞,真正的异步IO,是通知你事情已经做完了。

Share

如果你觉得本文对你有帮助,可以请我喝杯咖啡。

好吧,请你喝一杯