例如,一个进程正在以阻塞模式侦听某个端口,因此如果 I/O 未准备好,该进程将被阻塞。
while (true)
{
msg = recv(port, BLOCKING_FLAG); // blocks here
cout<<msg<<endl;
}
我们还知道我们可以让进程休眠:
sleep(1000)
。
我的问题是:如果这样的进程是阻塞的,我可以说该进程被挂起吗?进程会被从CPU中换出吗?同样的问题
sleep
。
“睡眠”——通常意味着线程处于显式
sleep(...)
调用中。
“挂起”——有时以通用方式使用,意味着线程正在等待......某事。 其他时候,“挂起”意味着某个其他线程或进程显式挂起它(例如,出于调试目的),并且该进程/线程将无法再次运行,直到显式恢复为止。
“阻止”——是三者中最通用的。 通常它仅仅意味着进程/线程正在等待某些东西。 有时它暗示线程/进程正在等待的是 I/O 操作。
总是很容易导致混乱。
在我看来,“挂起”和“睡眠”都是主动行为,而“阻止”是被动行为。
就挂起和睡眠而言,它们是程序员或其他线程/进程要求的。通常,睡眠有一个超时限制,这意味着时间到了它会自动唤醒。暂停恢复也需要有人来完成
然而,阻塞通常是由于资源或信息短缺造成的。 当满足要求时,操作系统通常会将线程/进程从阻塞状态调整为就绪状态。