NIO-select和epull

关于io估计点击到这里的或多或少对bio,nio,aio,  阻塞,非阻塞,同步异步已经有了初步的了解,但是还是很迷茫,   到底这几个名词有什么区别和联系?

我直接抛出结论吧:

1: IBM的技术网站上有个家伙写了篇文章将IO分为 四个象限, 同步阻塞,同步非阻塞, 异步阻塞,异步非阻塞,   这篇文章是错的,不要觉得IBM就一定正确

2:csdn和知乎上很多高分回答,99%也是错的,   在知乎上  怎样理解阻塞非阻塞与同步异步的区别? - 知乎 地下的评论和举例子也挺多, 大部分也是也是错的

 陈硕的回答是正确的,我copy过来,不过他并没有做详细的解释:   

在处理 IO 的时候,阻塞和非阻塞都是同步 IO。只有使用了特殊的 API 才是异步 IO。

 正确的划分是,从两个步骤看问题,一次IO请求经历两个阶段:

1: 用户态发起请求到内核态 ,内核向磁盘或者网卡读取数据,(等待数据到达内核缓冲区)

2: 内核将IO内容返回给用户态程序(数据从内核缓冲区copy到应用程序空间)

如果在用户态程序发起请求一直到用户态获取到数据都需要等待,那么这种IO模型就是同步模型,     这里来看,BIO一定是同步模型,nio只是在第一步没有等待

但是在发现内核告诉他有数据产生了,然后用户态程序自己🈶发起一次调用,也就是关键的第二部中还是需要等待,  因此nio也是同步模型

所以select,  poll  epull是同步非阻塞模型, nio是同步阻塞模型,   只有aio是真正的异步模型,  没有异步阻塞或者异步非阻塞模型这一说.

接下来说,  select模型是因为有1024的最大并发限制,尽管可以修改,但是限于操作系统限制,也不会太大,

                 pull模型是在select的基础上,去掉了最大连接数限制,

                epull是在pull模型上,轮训fid(就是网络连接socket)的时候,只处理发生了IO事件的fid,   提升了响应效率

具体的这方面倒是网文挺多,后边可以详细补充下

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值