今天看到有个人在某论坛问:异步IO是不是就是非阻塞IO,非阻塞IO是不是就是异步IO?
答案当然是否定的。
依稀记得之前看到过有个人比喻的很形象,你去相关部分盖个章:
- 同步+阻塞:你必须在窗口等着,等人来办完了才能走
- 同步+非阻塞:你可以出去转转或者干别的,人来了办完再走
- 异步+非阻塞:你把材料留下然后回家做其他事情,他们盖完章快递给你
- 异步+阻塞:你把材料留下,然后必须等着,他们盖完章快递给你
本质上,同步异步描述的是调用时序上的事情,跟阻塞不阻塞是没有关系的。
下面的图表示了同步和异步的区别:
附言:Linux中epoll解决的是阻不阻塞的问题,而不是同步异步的问题,它只是通知你,你做XX事情不会被阻塞,真正的异步IO,是通知你事情已经做完了。