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