被 windows 的系统调度逻辑破大防

2023-07-18 10:18:04 +08:00
 andyJado

事情是这样的:

代码本身很简单,thread::spawn ()多线程跑点累活儿。

因为结果很多就花了两周时间写后处理。

回过头来再跑累活儿发现 CPU 占用 33%怎么也上不去了。

认为自己重构代码时候引入了 bug 。

checkout install run,checkout install run..

嘿,最早的可运行版本现在也只能用 33%

才想起来自己以前开 cmd 都是管理员选项卡。

果然,管理员 cmd 才能跑 sync 代码到 90%

胸口发紧。

2190 次点击
所在节点    程序员
10 条回复
opengps
2023-07-18 10:22:45 +08:00
没看到到底因为啥,仅仅是因为管理员身份变化就能改变 cpu 的利用率?真没听过这个说法
andyJado
2023-07-18 10:25:57 +08:00
@opengps 累活儿里调用了别的大型计算软件。
cnbatch
2023-07-18 14:58:26 +08:00
看起来,用的似乎是大小核
我这普通核 CPU 并未遇到过这种怪事

不过 OP 也可以进一步测试(如果想测的话),用 ffmpeg 做个转码(只用 CPU ),看看 conhost 和 Windows Terminal 的运行情况是否一致
kenvix
2023-07-18 15:02:04 +08:00
怎么听起来像是你大量往控制台打印东西,导致阻塞了
kenvix
2023-07-18 15:03:51 +08:00
印象中 conhost 没有硬件渲染加速而 wt 有,往控制台打印东西太快就会阻塞住,所以产生了 wt 比 conhost 快的现象
mmdsun
2023-07-18 15:06:11 +08:00
为啥 CMD 和 Windows Terminal 性能有这么大差异?
难道输出太多? your-command > NUL 试试看
afirefish
2023-07-18 15:07:09 +08:00
大小核调度问题。33%看看不是小核跑满了,大核心在摸鱼。
afirefish
2023-07-18 15:07:59 +08:00
@afirefish 猜测
andyJado
2023-07-18 15:53:17 +08:00
@kenvix
按 @mmdsun 的方法测试了,还是 33%就按住了。

我觉得还是野生进程和有爹进程的区别。wt 开的话是有爹版,wt 可以用满 cpu 。野生进程和任务管理器在任务管理器中是同级的,可能被调度卡了。
kwanzaa
2023-07-19 00:03:27 +08:00
ryzen 无大小核同样的情况。

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

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

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

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

© 2021 V2EX