Windows 的线程逻辑?

2022-11-16 15:57:43 +08:00
 liuser666
use std::thread;
use std::time::Duration;
fn main() {
    // 创建一个线程 A
    thread::spawn(move || loop {});

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


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

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

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

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

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

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

© 2021 V2EX