📣 独立日限时特惠: VIP通行证立减$68
查看: 1200| 回复: 4
跳转到指定楼层
上一主题 下一主题
收起左侧

[学C/C++] 内核能同时准备多个数据吗 - 论“Linux的五大I/O模型”

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
本帖最后由 techDiscussion 于 2020-12-7 08:34 编辑

Linux的五大I/O模型  https://blog.xieyangzhe.com/archives/841


“nonBlocking IO模型中,数据准备阶段并没有阻塞,因为应用进程不断的查询内核数据是否准备完毕,并没有被阻塞,实际上应用进程可以在这时干其他事情。在数据复制阶段阻塞。”

里面看到这句话。

我的理解是,

在non-Blocking的时候,即便是不断查询“内核数据是否准备完毕” -- 意思是说,如果内核数据没准备完毕,就不能做其他的事情了吗?  那不是跟block是一样的了?

留言会给米。也求一个米

此外,non-Blocking的切实意义是啥呢? 为什么需要non-Blocking呢


上一篇:觉得DFS实现起来要比其他的算法困难?
下一篇:str_cli函数主要目的是什么
全局:
non-blocking模型中,read()返回EWOULDBLOCK后,你可以去干别的,没有规定说你必须一直不停的重试read()(即busy waiting/spinning)。

如果不是busy waiting你的程序代码可能会更复杂些,因为你要记得过一会再来重试read()。

补充内容 (2020-12-7 08:52):
单纯的non-blocking我感觉很少用到,一般都是跟io multiplexing或aio结合使用

评分

参与人数 2大米 +3 收起 理由
14417335 + 2
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
 楼主| techDiscussion 2020-12-7 09:05:10 | 只看该作者
全局:
jiupian 发表于 2020-12-7 08:47
non-blocking模型中,read()返回EWOULDBLOCK后,你可以去干别的,没有规定说你必须一直不停的重试read()(即 ...

但是,non-blocking模型中,我的client一直check,在拿到EWOULDBLOCK后,client就可以去做其他的事情了?  比如call另外一个server?
回复

使用道具 举报

🔗
jiupian 2020-12-7 12:52:35 | 只看该作者
全局:
techDiscussion 发表于 2020-12-7 09:05
但是,non-blocking模型中,我的client一直check,在拿到EWOULDBLOCK后,client就可以去做其他的事情了? ...

如果“call另一个server”这个动作不依赖于“第一个read()已完成”,那当然可以这么做 。这相当于提高了parallelism。

否则,EWOULDBLOCK说明第一个read()还没有完成,这时候能不能call另一个server取决于你的业务逻辑

评分

参与人数 1大米 +1 收起 理由
techDiscussion + 1 欢迎分享你知道的情况,会给更多积分奖励!

查看全部评分

回复

使用道具 举报

🔗
sodagreen 2022-1-28 18:16:38 | 只看该作者
全局:
non-blocking 是说CPU不会挂起当前的process,转去执行别的process,等到数据传输完成后,reschedule回之前的process继续执行. non-blocking的API一般回立刻返回一个状态值或错误值给调用函数,然后根据返回值继续执行后面的操作.

blocking API会阻塞当前的process,切换到别的process.

内核的一些函数,因为独占了某些资源,所以会要求只能用non-blocking API.因为如果一旦block了,它会一致占用资源.但是process又被挂起了,这样子会导致死锁. 所以只能用non-blocking API.

楼主说的不断查询,有点像spinlock.用spinlock的process不会被挂起,但是会不断的查询spinlock是不是free.如果free了就继续执行.如果还是lock状态,不断查询.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

>
快速回复 返回顶部 返回列表