自学内容网 自学内容网

Webserver(5.1)五种IO模型

阻塞与非阻塞、同步与异步

同步就是recv去读取数据,异步是内核把buf准备好了会发信号通知。
在处理IO的时候,阻塞与非阻塞都是同步IO,只有使用了特殊的API才是异步IO。
aio_read()、aio_write()
同步的话就是客户端主动一点去接收数据,异步的话就比较被动,等着对方通知你来接收数据。

Linux上的五种IO模型

阻塞blocking

调用某个函数,等待这个函数返回,期间什么也不做,不停地去检查这个函数有没有返回,必须等返回才能进行下一步动作。(文件描述符的属性)
比如read

非阻塞non-blocking

容易出现EAGAIN,就是时间还未发生,根据errno来决定。判断EAGAIN来反复调用read。这也是同步IO。用户自己去read。相比于阻塞,可以做一些其他的事情。

io复用

select/poll/epoll实现IO复用模型,等待文件描述符更新再去读取

信号驱动

IO事件就绪,进程收到SIGIO信号,然后处理IO事件。在通知SIGIO阶段是异步的,可以去做自己的事情。到第二个阶段,用read读数据时就是同步的。

异步(asynchronous)

就是读取都帮读取完了,不用read。直接通知客户端处理数据。
比较复杂,而且出错了难以找错误,所以项目中一般不用。复用比较多。


原文地址:https://blog.csdn.net/qq_43920838/article/details/143612429

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!