A_66_IO Pattern
2021-04-14 17:09:34 0 举报
AI智能生成
全面、高效的知识图谱:A_66_IO Pattern!! 全面又深度的提升认知,达到实际应用的目的! 建议先纵观全局,掌握好大方向。 再根据自己的需要,针对性的学习某一个点,最后做到逐步由点及面。
作者其他创作
大纲/内容
signal driven IO 信号驱动IO
asynchronous IO 异步非堵塞IO
BIO 同步堵塞IO
1. 发起recvfrom系统调用,等待数据到达,堵塞
2. 数据准备好后将数据从内核复制到用户进程,堵塞
NIO 同步非堵塞IO
1. 发起recvfrom系统调用后立即返回,之后通过轮询的方式查看数据是否已准备就绪,非堵塞
2. 数据准备好后将数据从内核复制到用户进程,堵塞
IO多路复用
实现
select(第一个被实现)
缺点
select 会修改传入的参数数组,这个对于一个需要调用很多次的函数,是非常不友好的
每次任何一个socket准备好数据后都需要遍历一遍链表, 随着监视的描述符数量的增长,其效率也会线性下降
非线程安全,socket加入到select之后无法收回,若强行关闭该socket则会出现不可预测的后果
打开FD的数量有限制,这对于连接数量比较大的服务器来说根本不能满足。虽然也可以选择多进程的解决方案( Apache就是这样实现的),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据同步远比不上线程间同步的高效,所以也不是一种完美的方案。
poll
缺点
非线程安全
每次任何一个socket准备好数据后都需要遍历一遍链表, 随着监视的描述符数量的增长,其效率也会线性下降
优点
无最大链接数的限制
从设计上来说,不再修改传入数组,不过这个要看你的平台
epoll (仅支持Linux)
涉及三个接口
epoll_create
epoll_ctl
epoll_wait
工作模式
level trigger 水平触发 (默认)
edge trigger 边缘触发
0 条评论
下一页