普通工作线程在循环中运行,在该循环中,它检查队列中的可用任务并使用它们。我似乎有一些例子,当没有可用任务时,线程会等待几毫秒,例如使用std::this_thread::sleep_for()
。但是,我希望我的线程以最小的延迟消耗任务,因此我不使用睡眠。这有什么不好吗?工作线程在检查任务时是否应该睡眠几毫秒?
答案 0 :(得分:6)
如果你"滚动你自己"队列或消息系统,避免消耗100%cpu的一种方法是" sleep"当没有工作可用的时候。但是,有一些其他机制让操作系统为您处理(信号量,基于操作系统的队列,如管道或邮箱系统,甚至使用网络消息传递机制等)会好得多,因为它简化了您的应用程序,并允许操作系统处理睡眠/清醒处理。
当然,这一切都取决于你实际想要实现的目标和期望是什么 - 如果你的代码打算在手机上运行,而不是浪费CPU周期是至关重要的,因为这会导致电池耗尽生活以及浪费可用于其他任务的CPU周期。另一方面,如果您的消息系统处于汽车的ABS制动器中,并且您需要以亚微秒精度测量来自传感器的脉冲时间,则睡眠将是一个坏主意,因为您的代码可能会睡眠比ABS传感器的脉冲长一倍。
如果它在桌面上,没有人会关心你的应用程序如果运行几秒钟甚至一分钟或更长时间都不会睡觉。但是,如果它持续使用1个核心100%的时间(并且你的应用程序不会产生至少与浪费的周期一样有价值的东西 - 显然计算世界上下一个最大素数或折叠蛋白质值得浪费从互联网接收数据包节省0.5毫秒可能不是。
只有您(以及参与项目的任何其他人员)才会知道您的项目的设计标准。这不是你可以"问互联网"关于。但是,一旦你弄清楚你的设计标准是什么,上面应该给你一些指导。