普通工作线程在循环中运行,在循环中它检查队列中的可用任务并使用它们。我看过一些例子,当没有可用的任务时,线程等待几毫秒,例如使用std::this_thread::sleep_for()
。但是,我希望我的线程以最小的延迟来使用这些任务,所以我不使用睡眠。这有什么不好吗?当检查任务时,工作线程是否应该休眠几毫秒?
发布于 2014-10-12 15:41:50
如果您“滚动您自己的”队列或消息系统,一种避免消耗100% cpu的方法是在没有工作可用的情况下“睡眠”一会儿。但是,有一些其他机制可以让操作系统为您处理这个问题(信号量、基于OS的队列(如管道或邮箱系统,甚至使用网络消息传递机制等)将更好,因为它简化了您的应用程序,并且允许操作系统负责睡眠/清醒的处理。
当然,这一切都取决于你真正想要达到的目标和期望--如果你的代码打算在移动电话上运行,而不是浪费CPU周期--这是至关重要的,因为这样做不仅浪费了电池寿命,也浪费了可以用于其他任务的CPU周期。另一方面,如果你的信息系统在汽车的ABS刹车中,你需要用亚微秒的精度来测量传感器的脉冲时间,睡眠将是个坏主意,因为你的代码可能会长时间睡眠超过一次脉冲从ABS传感器。
如果它在桌面上,如果你的应用程序运行了几秒钟,甚至一分钟或更长时间,没人会在意它是否会休眠。但是,如果你的应用程序在几个小时内继续使用100%的1核(而且你的应用程序没有浪费掉的周期那么有价值)--显然,计算世界上下一个最大的质数或折叠蛋白质是值得浪费的周期。在从互联网接收数据包时节省0.5毫秒的时间可能不是这样)。
只有你(当然是项目中的任何其他人)才知道你的项目的设计标准是什么。这不是你可以“问互联网”的事情。然而,一旦你知道了你的设计标准是什么,上面应该会给你一些指导。
https://stackoverflow.com/questions/26330523
复制