• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liuser666
V2EX  ›  程序员

Windows 的线程逻辑?

  •  
  •   liuser666 · Nov 16, 2022 · 3280 views
    This topic created in 1448 days ago, the information mentioned may be changed or developed.
    use std::thread;
    use std::time::Duration;
    fn main() {
        // 创建一个线程 A
        thread::spawn(move || loop {});
    
        // 睡眠一段时间,看子线程运行
        thread::sleep(Duration::from_millis(100000));
    }
    
    
    

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

    13 replies  •  2022-11-17 17:12:44 +08:00
    BrettD
    BrettD
    Nov 16, 2022 via iPhone
    1
    你没有自己手动设置 affinity 的话,线程可以自由在任何一个 CPU 线程上运行
    cc666
    cc666
    Nov 16, 2022
    2
    线程是有自己的时间片的,不是一直跑个不停,再调度的时候不保证在哪个核心。
    liuser666
    liuser666
    OP
    Nov 16, 2022
    3
    @BrettD 原来如此, 感谢感谢!
    liuser666
    liuser666
    OP
    Nov 16, 2022
    4
    @cc666 谢谢指教
    dqzcwxb
    dqzcwxb
    Nov 16, 2022
    6
    线程是同一时间只有一个核心在执行它,但是不保证始终是同一个核心
    ysc3839
    ysc3839
    Nov 16, 2022
    7
    @maggch97 Linux 好像是会优先分配给上一次运行的核心跑。
    不过 Windows 似乎有隐藏的电源选项可以调调度逻辑,可以用这个软件调 https://coderbag.com/product/quickcpu/features/windows/power-plan-management
    Jooooooooo
    Jooooooooo
    Nov 16, 2022
    8
    八股文里似乎很少问 windows 的逻辑 -.-
    cppc
    cppc
    Nov 16, 2022
    10
    你在任务管理器里面可以勾选哪些 CPU 核跑你的程序
    MrKrabs
    MrKrabs
    Nov 16, 2022
    11
    很正常啊
    opiviqo
    opiviqo
    Nov 17, 2022
    12
    不然呢 一个核心跑到死? 每个时间片哪个 cpu 空就哪个 cpu 运行。
    hez2010
    hez2010
    Nov 17, 2022 via Android
    13
    这种调度机制是用来均摊热量的,防止一个核心持续工作造成 CPU 局部温度过高。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1684 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 38ms · UTC 17:12 · PVG 01:12 · LAX 09:12 · JFK 12:12
    ♥ Do have faith in what you're doing.