阻塞、挂起和睡眠之间有什么区别
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 操作。
例如,一个进程正在以阻塞模式监听某个端口,所以如果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 操作。