gpt4 book ai didi

c++ - 工作线程是否需要休眠?

转载 作者:行者123 更新时间:2023-11-30 00:50:03 25 4
gpt4 key购买 nike

一个普通的工作线程在一个循环中运行,在这个循环中它检查队列中的可用任务并使用它们。我看过一些示例,其中线程在没有可用任务时等待几毫秒,例如使用 std::this_thread::sleep_for()。但是,我希望我的线程以最小的延迟消耗任务,所以我不使用 sleep 。那有什么不好的吗?检查任务时工作线程是否应该休眠几毫秒?

最佳答案

如果您“滚动自己的”队列或消息系统,避免消耗 100% CPU 的一种方法是在没有可用工作时“休眠”一会儿。然而,有一些其他机制让操作系统为你处理这个(信号量,基于操作系统的队列,如管道或邮箱系统,甚至使用网络消息传递机制等)会好得多,因为它简化了您的应用程序,并允许操作系统负责 sleep /唤醒处理。

当然,这完全取决于您实际想要实现的目标以及期望是什么 - 如果您的代码打算在手机上运行,​​那么不浪费 CPU 周期是至关重要的,因为这会耗尽电池电量生命以及浪费可用于其他任务的 CPU 周期。另一方面,如果您的消息系统位于汽车的 ABS 制动器中,并且您需要以亚微秒的精度测量来自传感器的脉冲时间,那么休眠将是一个坏主意,因为您的代码可能会休眠来自 ABS 传感器的脉冲比一次长很多。

如果它在桌面上,如果您的应用程序运行了几秒钟甚至一分钟或更长时间,没有人会关心它是否不休眠。但是,如果它持续数小时以 100% 的速度使用 1 个核心(并且您的应用程序没有产生至少与浪费的周期一样有值(value)的东西 - 显然计算世界上下一个最大的素数或折叠蛋白质值得浪费周期. 从 Internet 接收数据包时节省 0.5 毫秒可能不是)。

只有您(当然还有参与该项目的任何其他人)会知道您的项目的设计标准是什么。这不是您可以“在互联网上询问”的事情。但是,一旦您弄清楚您的设计标准是什么,上面的内容应该会给您一些指导。

关于c++ - 工作线程是否需要休眠?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26330523/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com