use std::thread;
use std::time::Duration;
fn main() {
// 创建一个线程 A
thread::spawn(move || loop {});
// 睡眠一段时间,看子线程运行
thread::sleep(Duration::from_millis(100000));
}
rust 写了一个空循环, 看看是不是能跑满一个核心. 结果从任务管理器里看就是几个核心来回满载, 所以 Windows 的线程居然是在不同核心里来回切换?
![]() |
1
BrettD 200 天前 via iPhone
你没有自己手动设置 affinity 的话,线程可以自由在任何一个 CPU 线程上运行
|
2
cc666 200 天前
线程是有自己的时间片的,不是一直跑个不停,再调度的时候不保证在哪个核心。
|
5
maggch97 200 天前
|
6
dqzcwxb 200 天前
线程是同一时间只有一个核心在执行它,但是不保证始终是同一个核心
|
![]() |
7
ysc3839 200 天前
@maggch97 Linux 好像是会优先分配给上一次运行的核心跑。
不过 Windows 似乎有隐藏的电源选项可以调调度逻辑,可以用这个软件调 https://coderbag.com/product/quickcpu/features/windows/power-plan-management |
8
Jooooooooo 200 天前
八股文里似乎很少问 windows 的逻辑 -.-
|
9
maggch97 200 天前
|
10
cppc 200 天前
你在任务管理器里面可以勾选哪些 CPU 核跑你的程序
|
11
MrKrabs 200 天前
很正常啊
|
![]() |
12
opiviqo 199 天前
不然呢 一个核心跑到死? 每个时间片哪个 cpu 空就哪个 cpu 运行。
|
13
hez2010 199 天前 via Android
这种调度机制是用来均摊热量的,防止一个核心持续工作造成 CPU 局部温度过高。
|