- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
什么是自愿抢占?我只知道这是调度中的一个概念。
最佳答案
这取决于操作系统。
在某些 RTOS(实时操作系统)中,自愿抢占意味着正在运行的进程声明它可以被抢占的点(否则它将运行直到完成)。考虑这个变体的另一种方式是协程中的 yield。这与内核决定抢占的大多数桌面操作系统形成对比。请记住,某些 RTOS 没有“用户模式”的概念。
在 Linux 中(至少),“自愿抢占”有点用词不当:
传统上(没有强制抢占),当用户进程进行系统调用(在内核模式下)时,它会阻塞直到完成。只有用户模式代码可以被抢占。
抢占式内核使得内核代码本身可以被抢占。这听起来多余,但值得注意的是,我们的意思是内核是可抢占的,而不是“内核支持抢占”。强制/非自愿抢占意味着即使在为系统调用提供服务时,高优先级用户进程的中断也可以“强制”内核进行上下文切换,以便它现在可以运行(从技术上讲,它并不是真正的上下文切换,但它具有相同的影响)。这减少了用户进程“看到”硬件状态变化的延迟。
自愿抢占是内核定期检查以查看它是否应该“在执行内核操作时”重新调度进程。也就是说,它不仅仅在抢占点调度/重新调度用户进程,而是在处理诸如 I/O 之类的事情时定期进行。因此,通常高优先级用户进程可能仍需要等待低优先级进程完成其切片,而高优先级进程现在可能会“提前”运行,因为内核会更频繁地检查它是否要运行。这减少了用户进程从挂起状态移动到运行状态的延迟(以整体系统吞吐量为代价)。
关于terminology - 什么是自愿抢占?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5174955/
CPU 的自愿让出是 Linux pthread 库中的线程可以在同一进程下调度另一个线程的唯一方法吗? (因为pthread是用户级线程实现?) 似乎 pthread_yield() 和互斥体(由
我是一名优秀的程序员,十分优秀!