繁体   English   中英

为什么for(;;){}不再崩溃我的电脑?

[英]Why a for(;;){} doesn't crash my computer anymore?

几年前,当我获得学位时,我的老师告诉我,如果我在C中进行无限循环,它会使我的计算机崩溃,使得它无需使用所有处理器资源,我需要重新启动系统以使事情变得更好再次。 今天我在Windows 7计算机上测试了相同的情况,我看到我的计算机没有崩溃,我的处理器资源只是“空闲”。 从5年前到今天有什么变化来改变这个具体事件?

如果操作系统不支持抢占式多任务处理,则无限循环只会“崩溃”操作系统。 在任何体面的操作系统中,调度程序将使该过程偶尔休息并允许其他内容运行。

无论如何,如果资源使用率很低,请查看生成的代码 - 编译器可能已经做了一些聪明的事情,比如优化整个事情。

你的老师告诉你一些开始时不正确的事情,所以不会发生这种事并不奇怪。

最多,无限循环将使您的CPU达到100%,但在任何现代操作系统上,其他进程仍将获得时间片,您可以轻松地将其杀死。 如果程序员的一个简单错误使得整个机器很容易挂起,那么操作系统就不会有多大用处。

与8年前不同,多核处理器现在已经普遍使用,这意味着单个信息流程现在只能占用单个核心,而其余核心可以自由地完成其他工作。 即使这样,您也必须运行一个非常糟糕的操作系统,以允许一个繁忙的循环过程来占用整个系统。

自W95以来,Windows有一个抢占式多任务程序。 即使在单CPU盒子上,一个looper线程仍然可以使盒子可用,(虽然速度较慢),当然可用于以通常的方式关闭违规进程或启动任务管理器并终止进程。

要真正为您打包,请将线程和处理优先级提升到实时并创建与核心一样多的线程(保存您的工作)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM