【发布时间】:2021-12-20 04:20:26
【问题描述】:
我正在研究如何用 C 编写一个 shell,并且我遇到了一种方法来使用“在实现等待命令时围绕睡眠函数的忙循环”。在循环中,使用了while(1) 循环。我想无条件循环,因此占用一些处理时间和空间?繁忙循环的目的究竟是什么?另外,如果惰性循环中的唯一目标是有一个无条件循环,那么我们就不能使用任何其他形式的循环,例如 for(;;) 而不是 while(1) 吗?
【问题讨论】:
-
请提供您在问题中提到的文章的链接。
-
也就是说,在没有仔细查看原始代码的情况下,我会说睡眠功能正在用于将线程放弃给程序中的其他线程。因此,
while(1)将花费很少的处理时间;大部分时间都在睡觉。 -
for(;;)与while(1)完全相同。如果你正在编写一个 shell,你最好将epoll与signalfd一起使用,而不是任何循环或休眠。 -
调用
sleep()而不是阻塞 IO 或完成子进程是错误的,无缘无故地增加了额外的延迟。无论您阅读的任何指南都表明这是垃圾。 -
我投票结束这个问题,因为它要求对建议的技术提供反馈,但没有提供足够的上下文来理解为什么会建议该技术,而实际上并非如此一种被广泛接受为良好做法的方法。 (Stack Overflow 仅限于“实用的、可回答的”问题;在没有充分理由的情况下使用糟糕的技术不是一个实际的选择。