很久以前,我想过这个问题:
windows窗口程序,是有一个大循环一直在循环,直到窗口关闭
[JavaScript] 纯文本查看 复制代码 while (GetMessage(&msg, NULL, 0, 0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
这个大循环,一直循环,检索消息,然后调用对应的事件函数,像易语言的按钮被单机啊,这些事件,都是由这个大循环的DispatchMessage(&msg),调用过来的
我以前就想过,只要软件打开了就一直在循环,那为什么几乎不占cpu,而我按钮点击执行某个功能的时候,可能cpu就上来了
直到后面深入学习才了解了
软件工作,整体分为两类操作:计算和IO
计算就是单纯的cpu计算
IO(输入输出)就是和外部设备打交道
比如,读写文件(硬盘io),网络收发(网卡io)
单纯计算,很容易的占满cpu了
但是如果加入了io操作,因为io操作,基本上都不可能瞬间完成,要等,所以就像易语言post软件,开几百个线程,也占不满cpu,你等待网络返回的时候,cpu就切换到别的线程,干别的事去了
软件多开CPU上限了,来大佬帮解决
https://bbs.125.la/forum.php?mod=viewthread&tid=14836952
(出处: 精易论坛)
像这个情况,大概率就是io满负载了,开在多,也是堵在io那里,io通畅了,cpu才有活干
|