0
点赞
收藏
分享

微信扫一扫

网络io阻塞,非阻塞,同步,异步

花明 2022-01-04 阅读 51

一次典型的io分成两个阶段,第一阶段是数据是否就绪,第二阶段是进行数据读写。如int recv( int socket fd, char *buf, int len, int flags)接口,涉及到这两个过程,1是tcp缓冲区是否有数据(是否就绪),2是如何将tcp缓冲区数据拷贝到应用程序的buf中(数据读写)

阻塞io和非阻塞io描述的是第一阶段,阻塞io指的是当socket缓冲区没有数据的时候,则阻塞当前线程,直到有数据为止,非阻塞io则直接返回。

同步io和异步io描述的是第二阶段,同步io指的是数据读写过程由应用层来完成,而异步io指的是数据读写由内核来完成,并且内核在完成将数据拷贝到应用缓冲区后,通过一定机制通知通知应用程序。int recv( int socket fd, char *buf, int len, int flags)是同步接口。通过调用aio_read和aio_write可以实现异步io编程。(在处理io的时候,阻塞和非阻塞都是同步io,只有使用了特殊的api才是异步io---- 陈硕)

io的同步和异步跟我们业务逻辑层面的同步和异步其实思想是一致的。

同步:a操作等待b操作做完事情,得到返回值,继续处理;

异步:a操作告诉b操作感兴趣的事件以及通知,然后继续执行自己的业务逻辑,b操作监听到相应事件后,通知a操作。

在io的同步和异步中,a操作就是应用代码逻辑,b操作就是内核程序

举报

相关推荐

0 条评论