转载:
100%让你弄明白5种IO模型 - 勤劳的小手的文章 - 知乎
https://zhuanlan.zhihu.com/p/115912936
自我理解:
1.阻塞IO:数据未准备好,应用程序就一直等待,不会执行别的请求,直到有数据返回。
2.非阻塞IO:数据未准备好就返回一个错误EWOULDBLOCK,不会让应用一直等待中,同时应用程序会通过不停的调用recvfrom函数去查询是否有结果,直到有结果为止。
3.IO多路复用:为了解决2不停调用recvfrom函数去查询问题,使用了select函数去监控多个请求是否有数据准备好,有就通知应用程序调用recvfrom去读取,select去监控请求的时候采用的是轮询方式
4.信号驱动IO:为了解决3 select的无脑轮询(因为大多数的轮询是无效的),设置了一个信号在内核上,当数据准备好时,内核就通过信号去通知应用程序你该去读取数据了,然后应用程序才会去读取
5.异步IO:前4种方式都需要应用程序自己去读取数据,异步直接跳过了这一步,自动将数据准备好后从内核复制到用户空间同时告诉应用程序数据已经完成了。
从1到5的过程是一个傻瓜式到全自动的过程。
网络IO---5大模型
最新推荐文章于 2024-09-12 22:46:32 发布