阻塞、挂起和睡眠有什么区别

问题描述 投票:0回答:2

例如,一个进程正在以阻塞模式侦听某个端口,因此如果 I/O 未准备好,该进程将被阻塞。

while (true)
{
    msg = recv(port, BLOCKING_FLAG); // blocks here
    cout<<msg<<endl;
}

我们还知道我们可以让进程休眠:

sleep(1000)

我的问题是:如果这样的进程是阻塞的,我可以说该进程被挂起吗?进程会被从CPU中换出吗?同样的问题

sleep

multithreading process sleep blocking suspend
2个回答
7
投票

“睡眠”——通常意味着线程处于显式

sleep(...)
调用中。

“挂起”——有时以通用方式使用,意味着线程正在等待......某事。 其他时候,“挂起”意味着某个其他线程或进程显式挂起它(例如,出于调试目的),并且该进程/线程将无法再次运行,直到显式恢复为止。

“阻止”——是三者中最通用的。 通常它仅仅意味着进程/线程正在等待某些东西。 有时它暗示线程/进程正在等待的是 I/O 操作。


0
投票

总是很容易导致混乱。

在我看来,“挂起”和“睡眠”都是主动行为,而“阻止”是被动行为。

就挂起和睡眠而言,它们是程序员或其他线程/进程要求的。通常,睡眠有一个超时限制,这意味着时间到了它会自动唤醒。暂停恢复也需要有人来完成

然而,阻塞通常是由于资源或信息短缺造成的。 当满足要求时,操作系统通常会将线程/进程从阻塞状态调整为就绪状态。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.