gpt4 book ai didi

io - 什么时候轮询比中断好?

转载 作者:行者123 更新时间:2023-12-01 11:44:23 28 4
gpt4 key购买 nike

我在看这张照片:
enter image description here

并有两个关于它的问题:
1. 为了通过中断引用轮询,磁盘应该快多少?

我认为这是因为 ISR 和进程跳转(使用中断时)-例如,使用快速 SSD 时轮询会更好,其中轮询比中断(ISR+ 调度程序)花费的时间更少。我错了吗?

第二个问题是:如果在我的第一个问题中我的磁盘比 SSD 慢,但仍然很快 - 有什么理由更喜欢轮询吗?

我想知道我将拥有大量 I/O 的事实 - 读取请求是否足以让我更喜欢轮询。

谢谢!

最佳答案

您可以想象这样一种情况:运行中断处理程序(使您的缓存无效,设置中断堆栈以运行)的开销可能比实际执行读取或写入要慢,在这种情况下,我猜轮询会更快。

然而,SSD 比磁盘快,但仍然比内存慢得多。 SSD 仍然需要数十微秒到毫秒的时间来完成每个 I/O,而执行中断设置和拆卸使用所有内存操作,并且可能最多需要 100-1000 个周期(~100ns 到 1us)。

使用中断而不是轮询的主要好处是使用中断的“禁用”效果要低得多,因为您不必安排 I/O 线程在没有可用数据时连续轮询更多数据。它有一个额外的好处,即 I/O 会立即处理,因此如果用户键入一个键,在 I/O 线程被调度时,在字母出现在屏幕上之前不会有暂停。结合这些问题是一团糟 - 将任意停顿插入您的 I/O 线程会降低轮询的资源密集度,但会以更慢的响应时间为代价。这些可能是没有人在内核 I/O 设计中使用轮询的主要原因。

从用户进程的角度来看(使用软件中断系统,例如 Unix 信号),任何一种方式都有意义,因为轮询通常意味着阻塞系统调用,例如 read()select()而不是(比如说)检查一个 bool 内存映射变量或像内核版本的轮询那样发出设备指令。在操作系统中让系统调用为我们完成这项工作可能对性能有益,因为与任何其他系统调用相比,用户态线程不会或多或少地使其缓存失效。然而,这非常依赖于操作系统,因此分析是确定哪个代码路径更快的最佳选择。

关于io - 什么时候轮询比中断好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16739653/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com