web server|01阻塞和非阻塞、同步和异步

数据就绪:

阻塞:

调用IO方法的线程进入阻塞状态   ssize_t recv(int sockfd, void *buf, size_t len, int flags);

非阻塞:

不会改变线程的状态, 通过返回值判断 int size = recv(sockfd, buf, 1024, 0);

size == -1, 出错了(EINTR, EAGAIN, EWOULDBLOCK)

size == 0,读取到数据的末尾, 对方连接关闭

size > 0, 读取到了多少的数据


数据读写:

同步

char buf[1024] = {0}; 从TCP接收缓冲区搬来

int size = recv(sockfd, buf, 1024, 0);

if(size > 0) {

    buf

}

异步

异步IO接口  sockfd buf 通知方式(sigio信号)   ----buf的数据准备完毕

aio_read()

aio_write()  //Linux中的异步IO接口


处理IO的时候,阻塞和非阻塞都是同步IO,只有使用了特殊的API才是异步IO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容