Windows 的线程逻辑?

2022 年 11 月 16 日
 liuser666
use std::thread;
use std::time::Duration;
fn main() {
    // 创建一个线程 A
    thread::spawn(move || loop {});

    // 睡眠一段时间,看子线程运行
    thread::sleep(Duration::from_millis(100000));
}


rust 写了一个空循环, 看看是不是能跑满一个核心. 结果从任务管理器里看就是几个核心来回满载, 所以 Windows 的线程居然是在不同核心里来回切换?

2640 次点击
所在节点    程序员
13 条回复
BrettD
2022 年 11 月 16 日
你没有自己手动设置 affinity 的话,线程可以自由在任何一个 CPU 线程上运行
cc666
2022 年 11 月 16 日
线程是有自己的时间片的,不是一直跑个不停,再调度的时候不保证在哪个核心。
liuser666
2022 年 11 月 16 日
@BrettD 原来如此, 感谢感谢!
liuser666
2022 年 11 月 16 日
@cc666 谢谢指教
penzi
2022 年 11 月 16 日
dqzcwxb
2022 年 11 月 16 日
线程是同一时间只有一个核心在执行它,但是不保证始终是同一个核心
ysc3839
2022 年 11 月 16 日
@maggch97 Linux 好像是会优先分配给上一次运行的核心跑。
不过 Windows 似乎有隐藏的电源选项可以调调度逻辑,可以用这个软件调 https://coderbag.com/product/quickcpu/features/windows/power-plan-management
Jooooooooo
2022 年 11 月 16 日
八股文里似乎很少问 windows 的逻辑 -.-
penzi
2022 年 11 月 16 日
cppc
2022 年 11 月 16 日
你在任务管理器里面可以勾选哪些 CPU 核跑你的程序
MrKrabs
2022 年 11 月 16 日
很正常啊
opiviqo
2022 年 11 月 17 日
不然呢 一个核心跑到死? 每个时间片哪个 cpu 空就哪个 cpu 运行。
hez2010
2022 年 11 月 17 日
这种调度机制是用来均摊热量的,防止一个核心持续工作造成 CPU 局部温度过高。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/895711

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX