美文网首页
阻塞:(被动) 挂起(主动) 睡眠(主动)

阻塞:(被动) 挂起(主动) 睡眠(主动)

作者: 赖益文 | 来源:发表于2021-12-06 12:35 被阅读0次

    共同本质:

    阻塞:(被动)

    挂起(主动)

    睡眠(主动)

    共同本质:

    正在执行的进程/线程,由于某些原因(主、被动)释放CPU,暂停执行

    (这里讨论的均是处于运行状态的进/线程)

    阻塞:(被动)

    进/线程被动暂停执行,阻塞的进程仍处于内存中,OS把处理机分配给另一个就绪进程,而让被暂停的进程处于暂停状态。

    (自动)阻塞恢复:需要在等待的资源得到满足(例如获得了锁)后,才会进入就绪状态,等待被调度而执行。

    阻塞原因:

    进程:进程由于提出系统服务请求(如I/O操作),但因为某种原因未得到操作系统的立即响应,或者需要从其他合作进程获得的数据尚未到达等原因。

    线程:线程锁问题。

    挂起(主动)

    用户主动暂停执行进/线程,挂起的进程被换出到外存(磁盘)中。

    挂起恢复:需要用户主动控制,挂起时线程不会释放对象锁。

    挂起原因:

              终端用户的请求。当终端用户在自己的程序运行期间发现有可疑问题时,希望暂停使自己的程序静止下来。亦即,使正在执行的进程暂停执行;若此时用户进程正处于就绪状态而未执行,则该进程暂不接受调度,以便用户研究其执行情况或对程序进行修改。我们把这种静止状态成为“挂起状态”。

              父进程的请求。有时父进程希望挂起自己的某个子进程,以便考察和修改子进程,或者协调各子进程间的活动。

              负荷调节的需要。当实时系统中的工作负荷较重,已可能影响到对实时任务的控制时,可由系统把一些不重要的进程挂起,以保证系统能正常运行。

              操作系统的需要。操作系统有时希望挂起某些进程,以便检查运行中的资源使用情况或进行记账。

              对换的需要。为了缓和内存紧张的情况,将内存中处于阻塞状态的进程换至外存上。

    睡眠(主动)

    用户主动暂停执行进/线程,睡眠进/线程任存于内存。

    睡眠恢复:是自动完成的,睡眠时间到了则恢复到就绪态,睡眠时线程不会释放对象锁。

    eg: Thread.sleep(1000);

    //将线程睡眠一秒。

    相关文章

      网友评论

          本文标题:阻塞:(被动) 挂起(主动) 睡眠(主动)

          本文链接:https://www.haomeiwen.com/subject/egtmxrtx.html