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

what is the difference between block, suspend and sleep

例如,一个进程正在以阻塞模式监听某个端口,所以如果I/O没有准备好,进程将被阻塞。

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

我们也知道我们可以让进程休眠:sleep(1000).

我的问题是:如果这样一个进程是阻塞的,我能说这个进程被挂起了吗?该进程是否会从 CPU 换出? sleep.

上的相同问题

"Sleeping" -- 通常意味着线程处于显式 sleep(...) 调用中。

"Suspended" -- 有时以通用方式使用,表示线程正在等待...某事。其他时候,"Suspended" 意味着其他线程或进程 显式 暂停了它(例如,出于调试目的),并且 process/thread 将无法 运行 直到明确恢复。

"Blocked" -- 是三个中最通用的。通常它仅仅意味着 process/thread 正在等待某事。有时它暗示 thread/process 正在等待的是 I/O 操作。