我知道 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()”方法看起来就像被阻塞了,实际上它一直在运行。这在书上被称为“忙着等待”。
什么是“进程被阻止”?它的实施细节如何?也是死循环吗?还是其他一些?像信号机制?
例如:猫 xxx | grep "abc"
进程“cat”读取文件并输出它们。
进程“grep”等待来自“cat”的输入。
所以在“cat”输出数据之前,“grep”应该被阻塞,等待输入并继续。关于这个“阻塞”的死亡循环一直在读取输入流的详细信息是什么?还是真的停止运行,等待信号唤醒它运行?