日常工作中,我们经常会碰到这样的情况:
正当你在玩游戏、保存文档或观看电影时,这样的错误提示会让你抓狂。
面对这样的情况,不要惊慌或生气,而是要冷静地思考。当程序无响应时,我们会看到两个选项:等待或关闭程序。
如果选择等待,不知道要等多久,可能是很长一段时间,也可能是永远;
而如果放弃等待,之前所有的努力都会付诸东流。
让我们深入了解一下,当程序“未响应”时,计算机正在做什么?
在 Windows 系统中,每个正在运行的程序都有一个后台进程,一个进程中可能有许多线程(例如,打开 QQ 会产生一个进程,QQ 中同时打开 5 个不同用户的聊天窗口会产生 5 个线程),每个线程只能同时处理一条消息。
当 Windows 向程序发送一条消息,而程序正在忙于处理其他任务而没有理会 Windows 时,Windows 就会告诉用户“XXX 未响应”。
通常来说,程序会在工作时定期检查是否有新的消息,例如,你在解压文件时点击关闭窗口,程序会提醒你是否中断操作。
程序无响应本质上就是线程没有响应消息了。而线程不响应消息的原因有两个:
1. 线程正在处理一项耗时的任务,这种情况只需要耐心等待程序完成手上的工作,问题就会得到解决,但可能需要很长的时间;
2. 线程死锁了,当两个或多个线程的工作都需要占用系统资源,但都不愿意让步时,就会发生死锁,就像两方争执不下。处于这样的情况,程序通常无法恢复,只能强制关闭了。
在程序无响应时,中间人 Windows 系统无能为力,为了避免承担责任,Windows 会将决定权交给你:等待程序响应还是关闭程序?这样看来,是不是像是陷入了一个死循环?
有一种办法可以判断程序是否仍在工作:
1. 按下 Ctrl + Shift + Esc 组合键打开任务管理器,查看 CPU 占用率是否下降;
2. 如果程序正在输出文件,可以观察文件是否刷新或文件大小是否有变化。
这个过程可能需要很长时间,但总比毫无头绪地等待要好。
程序无响应有时会带来严重的后果,那么有没有办法避免程序出现未响应呢?