V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
liuser666
V2EX  ›  程序员

Windows 的线程逻辑?

  •  
  •   liuser666 · 2022-11-16 15:57:43 +08:00 · 2064 次点击
    这是一个创建于 768 天前的主题,其中的信息可能已经有所发展或是发生改变。
    use std::thread;
    use std::time::Duration;
    fn main() {
        // 创建一个线程 A
        thread::spawn(move || loop {});
    
        // 睡眠一段时间,看子线程运行
        thread::sleep(Duration::from_millis(100000));
    }
    
    
    

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

    13 条回复    2022-11-17 17:12:44 +08:00
    BrettD
        1
    BrettD  
       2022-11-16 16:10:12 +08:00 via iPhone
    你没有自己手动设置 affinity 的话,线程可以自由在任何一个 CPU 线程上运行
    cc666
        2
    cc666  
       2022-11-16 16:11:51 +08:00
    线程是有自己的时间片的,不是一直跑个不停,再调度的时候不保证在哪个核心。
    liuser666
        3
    liuser666  
    OP
       2022-11-16 16:16:47 +08:00
    @BrettD 原来如此, 感谢感谢!
    liuser666
        4
    liuser666  
    OP
       2022-11-16 16:16:57 +08:00
    @cc666 谢谢指教
    maggch97
        5
    maggch97  
       2022-11-16 16:23:00 +08:00
    dqzcwxb
        6
    dqzcwxb  
       2022-11-16 16:45:22 +08:00
    线程是同一时间只有一个核心在执行它,但是不保证始终是同一个核心
    ysc3839
        7
    ysc3839  
       2022-11-16 16:49:42 +08:00
    @maggch97 Linux 好像是会优先分配给上一次运行的核心跑。
    不过 Windows 似乎有隐藏的电源选项可以调调度逻辑,可以用这个软件调 https://coderbag.com/product/quickcpu/features/windows/power-plan-management
    Jooooooooo
        8
    Jooooooooo  
       2022-11-16 16:54:25 +08:00
    八股文里似乎很少问 windows 的逻辑 -.-
    maggch97
        9
    maggch97  
       2022-11-16 17:16:54 +08:00
    cppc
        10
    cppc  
       2022-11-16 17:17:50 +08:00
    你在任务管理器里面可以勾选哪些 CPU 核跑你的程序
    MrKrabs
        11
    MrKrabs  
       2022-11-16 19:16:36 +08:00
    很正常啊
    opiviqo
        12
    opiviqo  
       2022-11-17 11:46:32 +08:00
    不然呢 一个核心跑到死? 每个时间片哪个 cpu 空就哪个 cpu 运行。
    hez2010
        13
    hez2010  
       2022-11-17 17:12:44 +08:00 via Android
    这种调度机制是用来均摊热量的,防止一个核心持续工作造成 CPU 局部温度过高。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5129 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:49 · PVG 11:49 · LAX 19:49 · JFK 22:49
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.