首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >纳秒睡眠()中所需的最小时间量子(),产生CPU所需的usleep()

纳秒睡眠()中所需的最小时间量子(),产生CPU所需的usleep()
EN

Stack Overflow用户
提问于 2020-02-14 19:00:30
回答 2查看 423关注 0票数 1

在我的工作场所中的并发代码中,有几个具有非零常数释放CPU而不依赖futex()或睡眠同步原语使线程休眠(例如,在等待并发队列中的元素时)。当其他线程可以在CPU上调度时,代码声称可以防止线程消耗CPU而不做任何实际工作的病态情况。假设睡眠函数和内核线程调度程序之间的协作是正确的,这本身听起来是合理的。

在linux中是否有这样一个概念,即将最小持续时间传递给nanosleep()、usleep()等。当内核被超额订阅时,已知会使调用线程处于休眠状态,并在同一核心位置上运行另一个线程吗?如果持续时间小于这一点,那么线程实际上不会产生CPU,而是继续旋转吗?这就形成了传递给the ()函数的常量的基础,以便使其表现得像粗产量。

我意识到sched_yield()可能更适合于代码所做的工作;但我只是想在对现有代码的替换或改进进行基准测试之前,先了解linux ()函数的行为。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2020-02-14 19:08:44

手册页面清楚地表明,它不再繁忙-等待。

为了支持需要更精确暂停的应用程序(例如,为了控制一些时间关键的硬件),纳秒睡眠(

())将处理高达2毫秒的暂停,当从实时策略(如SCHED_FIFO或SCHED_RR )调度的线程调用时,将以微秒的精度忙于等待。这个特殊的扩展在内核2.5.39中被删除,因此在Linux2.6.0和更高版本的内核中不可用。

票数 2
EN

Stack Overflow用户

发布于 2020-02-14 20:31:52

@斯塔克已经用书面的方式回答了你的问题,但要详细说明的是,没有这么做。如果您正在等待事件发生,则执行等待事件的操作,如pthread_cond_waitsem_waitpollread等,而不是休眠和重试。这将避免浪费大量的cpu时间,还会阻止错误的编程模型(因为通常等待的原语也会确保独占访问/同步)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60232117

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档