windows - 休眠线程时到底发生了什么

标签 windows linux operating-system

我想知道操作系统中的任务调度器是如何处理休眠线程的。

我的意思是,调度程序是否仍会检查休眠线程,或者在确定在接下来的 10 毫秒或给定的多长时间内激活哪个线程时完全跳过。

我问这个问题的原因是想弄清楚休眠线程是否消耗 CPU 周期(尽管很少)。

那么有人知道会发生什么吗?

你知道从 Windows 到 Linux 有什么不同吗?

最佳答案

当 CPU 正在执行该线程的指令时,该线程就会运行。调度程序将 CPU 交给可运行的线程。休眠线程只是调度程序内部表的一个条目;该线程本身不消耗 CPU,因为调度程序知道该线程不可运行,因此不会给他 CPU。该条目在概念上包含线程应被唤醒的时间。

sleep 线程可能有间接成本,由调度程序本身管理时间。这实际上取决于调度程序采用的结构和算法;据传,Linux 内核调度程序非常擅长管理数千个休眠线程,而无需花费太多时间来决定运行哪个线程。其他一些操作系统的表现也不尽如人意,但根据经验,当线程/进程总数少于一千时,这种影响可以忽略不计。

关于windows - 休眠线程时到底发生了什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2297837/

相关文章:

java - Jenkins 奴隶无法写入 jarCache

c++ - 在 Windows 中访问 Intel CPU I/O 寄存器的简便方法

python - 如何将项目中使用的所有 pip 包制作成 .tar.gz 文件?

c++ - 为什么应用程序二进制接口(interface)对编程很重要

c - 为什么 semop(semid,&wait[1],2);在一组三个信号量上减少第 0 个信号量而不是第 1 个和第 2 个信号量的值?

algorithm - 优先级在循环调度中起什么作用?

windows - 如何从批处理文件中的脚本参数中去除引号?

windows - 用于从文件中的名称列表创建文件夹的 Powershell 脚本

linux - 在 ASP .NET Core 2 和 Linux 上使用证书保护数据保护 key 文件

linux - FreeBSD 9.3 上未找到点命令 (.)