加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux – 系统调用如select()或poll()在引擎盖下工作?

发布时间:2020-12-13 18:34:41 所属栏目:Linux 来源:网络整理
导读:我明白通过select()和poll()的异步I / O操作不使用处理器时间,即它不是一个繁忙的循环,但是它们是如何真正实现的?硬件支持在某种程度上,是为什么使用这些的明显的处理器成本呢? 解决方法 这取决于选择/投票正在等待什么.我们来看几例我将要采用单核机器进
我明白通过select()和poll()的异步I / O操作不使用处理器时间,即它不是一个繁忙的循环,但是它们是如何真正实现的?硬件支持在某种程度上,是为什么使用这些的明显的处理器成本呢?

解决方法

这取决于选择/投票正在等待什么.我们来看几例我将要采用单核机器进行简化.

首先,考虑选择正在等待另一个进程的情况(例如,另一个进程可能会执行一些计算,然后通过管道输出结果).在这种情况下,内核会将您的进程标记为等待输入,因此它不会为您的进程提供任何CPU时间.当其他进程输出数据时,内核将唤醒您的进程(在CPU上给予时间),以便它可以处理输入.即使其他进程仍在运行,这将会发生,因为现代操作系统使用抢占式多任务,这意味着内核会定期中断进程以使其他进程有机会使用CPU(“时间分片”).

当选择等待I / O时,图像会发生变化;网络数据,或键盘输入.在这种情况下,虽然古老的硬件必须旋转CPU等待输入,但所有现代硬件都可以将CPU本身置于低功耗“等待”状态,直到硬件提供中断 – 内核处理的特殊处理事件.在中断处理程序中,CPU将记录传入的数据,并且从中断返回后将唤醒您的进程以允许其处理数据.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读