博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
IO 多路服用模型
阅读量:6585 次
发布时间:2019-06-24

本文共 797 字,大约阅读时间需要 2 分钟。

hot3.png

3d47e9eae35594c2624664e5332911bb88f.jpg

 

多个连接公用一个等待机制,本模型会阻塞进场,但是进程是阻塞在select 或者poll 这两个系统调用上,而不是阻塞在真正的IO操作上

用户首先将需要进行IO操作添加到select中,继续执行做其他的工作(异步),同时等待select 系统调用返回。当数据到达时,IO被激活,select函数返回。用户线程正式发起read请求,读取数据并继续执行。

从流程上来看,使用select函数继续IO请求和同步阻塞模型没有太大的区别,甚至还多了添加监视IO,以及调用select函数的额外操作,效率更差。并且阻塞两次,但是第一次阻塞在select上时,select可以监控多个IO上是否已有IO操作准备就绪,即可达到在同一个线程内同时处理多个IO请求的目的。而不像阻塞IO那种,一次只能监控一个IO

虽然上述方式允许单线程内处理多个IO请求,但是每个IO请求的过程还是阻塞的(在select 函数上阻塞),平均时间甚至比同步阻塞IO模型更长。如果用户线程只是注册自己需要的IO请求,然后去做自己的事情,等到暑假来时在进行处理,则可以提高CPU的利用率

IO多路复用是最常用的IO模型,但是其异步程度还不够‘彻底’,因它使用了会阻塞线程的select系统调用。因此IO多路复用只能称为异步阻塞IO模型,而非真正的异步IO.

IO多路复用是指内核一旦发现进场指定的一个或者多个IO条件准备就绪,就通知该进程

IO多路复用适用如下场合:

    当客户端处理多个描述符时(一般是交互式输入和网络套接口),必须使用I/O复用

    当一个TCP服务器既要处理监听套接字,又要处理已连接套接字,一般也要用到IO      复用

    当一个服务器既要处理TCP,又要处理UDP,一般使用···

    当一个服务器要处理多个服务或多个协议 

转载于:https://my.oschina.net/huangguangsheng/blog/2231178

你可能感兴趣的文章
css3做的nav
查看>>
互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
查看>>
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
PHP 时间操作 / 跳转问题
查看>>
使用流的方式往页面前台输出图片
查看>>
LAMP,安装脚本
查看>>
易语言 --什么情况下 用许可证
查看>>
建属于自己的网站
查看>>
boost库之智能指针
查看>>
我的友情链接
查看>>
我来自CSDN
查看>>
怎么给电脑设置IP地址和DNS地址,各系统设置IP/DNS几种方法
查看>>
必 备 习 题 集 (一)
查看>>
转:模态对话框的支持 (IE,Firefox,Chrome)
查看>>
关于图片或者文件在数据库的存储方式归纳
查看>>
Project Euler 345: Matrix Sum
查看>>
.htaccess 基础教程(四)Apache RewriteCond 规则参数
查看>>
Docker 部署 SpringBoot 项目整合 Redis 镜像做访问计数Demo
查看>>
React Native 0.20官方入门教程
查看>>