我知道Busy Waiting的实现方式。它是一个无限循环,像这样:
//main thread
while (true) {
msg = msgQueue.next();
msg.runnable.run();
}
//....msg queue
public Message next() {
while (true) {
if (!queue.isEmpty()) {
return queue.dequeue();
}
}
}
因此,“next()”方法看起来像是被阻塞了,实际上它一直在运行。 这在书中被称为“忙等待(busy waiting)”。
那么,“进程阻塞”是什么?它的实现细节是什么? 是否也是一个死循环,或者是其他的机制,例如信号机制?
例如: cat xxx | grep "abc"
进程“cat”读取文件并将它们输出。
所以在“cat”输出数据之前,“grep”应该被阻塞,等待输入然后继续执行。 关于这种“阻塞”的细节,是一个死循环一直读取输入流吗?还是真正停止运行,等待一个信号唤醒它再次执行?