欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 游戏 > Webserver(5.1)五种IO模型

Webserver(5.1)五种IO模型

2025/11/8 4:49:18 来源:https://blog.csdn.net/qq_43920838/article/details/143612429  浏览:    关键词:Webserver(5.1)五种IO模型

目录

  • 阻塞与非阻塞、同步与异步
  • Linux上的五种IO模型
    • 阻塞blocking
    • 非阻塞non-blocking
    • io复用
    • 信号驱动
    • 异步(asynchronous)

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

同步就是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。直接通知客户端处理数据。
比较复杂,而且出错了难以找错误,所以项目中一般不用。复用比较多。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词