IT门户, 中国互联网人工智能物联网行业资讯平台--公众IT
新闻来源:互联网资料整理       发布时间:2023/4/6 3:36:08       共计:4590 浏览

了解不深,就尝试套一下理论吧。
在现今流行的windows桌面机上,假如某个应用的线程出现了死循环,它是会消耗掉很多CPU时间,但不该100%占用甚至卡死系统。原因有两点,一是用完它的时间片,内核会强制切换到别的线程上去执行;另外多核的CPU,最多一个核被100%占用,其它线程还是能欢快地分享剩下的N-1个核。
写了个死循环代码在Win7 四核机器上做了个实验,确实卡不死,只有一个核在100%,该进程在24%~25%徘徊。
所以,猜测这是由于

某个内核线程的死循环

导致的,而非用户态线程。Windows / Linux属于非抢占式内核,如果一段ring0代码霸占着CPU某个核不放,就算处理过中断还是会继续霸占下去,不会切换到别的线程。如果还在自旋锁的互斥保护范围内,那另外的N-1核在事实上也被废了。或者系统里其它各个用户态线程的优先级和这个死循环代码在别的核上的兄弟代码不对等,所以分到的CPU时间会极端少?内核态死循环的杀伤力满塞,这个我就没做试验了。简言之,大概某个驱动写得忒烂了。

版权说明:
本网站凡注明“公众IT 原创”的皆为本站原创文章,如需转载请注明出处!
本网转载皆注明出处,遵循行业规范,如发现作品内容版权或其它问题的,请与我们联系处理!
您可以扫描右侧微信二维码联系我们。
网站首页 关于我们 联系我们 合作联系 会员说明 新闻投稿 隐私协议 网站地图