muduo库作者陈硕老师原话:在处理IO的时候,阻塞和非阻塞都是同步IO,只有使用了特殊的API才是异步IO
如果说的是业务层面上的一个逻辑处理是同步还是异步的时候,那么:
- 同步:A操作等待B操作做完事情后,得到返回值,继续处理
- 异步:A操作告诉B操作它感兴趣的事件以及通知方式,A操作继续执行自己的业务逻辑了;等待B监听到相应事件发生后,B会通知A,A开始相应的数据处理逻辑。
-
**同步阻塞:**比如int size = recv(fd,buf,1024,0),如果数据未就绪,recv阻塞当前线程,当数据就绪(fd的数据缓存区中有数据),并且应用程序花时间将缓存区中的数据搬到用户空间定义的buf后,recv返回
-
**同步非阻塞:**比如int size = recv(fd,buf,1024,0),数据未就绪但是recv依然返回,然后根据recv的返回值进行判断,如果
size==0&&errno = EAGAIN
,那么说明数据还没准备好