gpt4 book ai didi

c - nanosleep(),usleep()中产生CPU所需的最短时间量

转载 作者:行者123 更新时间:2023-12-03 13:18:41 28 4
gpt4 key购买 nike

在我的工作场所中的并发代码中,多次发生具有非零常量的nanosleep()或usleep(),以释放CPU而不依赖于futex(),或者使用 sleep 同步原语使线程进入休眠状态(例如例如,等待并发队列中的元素时)。该代码声称可以防止在其他线程可用于在该CPU上进行调度的情况下,线程占用CPU却不做任何实际工作的情况。假设 sleep 功能和内核线程调度程序之间的协作正确,这听起来很合理。

linux中是否有一个概念,其中最小持续时间传递给了nanosleep(),usleep()等。已知当内核被超额预订时,将调用线程置于 sleep 状态并在同一个内核上的地方运行另一个线程吗?如果持续时间短于该持续时间,则该线程实际上不会产生CPU,而是继续旋转吗?这形成了传递给sleep()函数的常数的基础,以使其表现得像粗糙的产量。

我意识到sched_yield()可能更适合代码在做什么;但是我只是想在对现有代码的替换或改进进行基准测试之前,对linux sleep()函数的行为进行自我教育。

谢谢!

最佳答案

手册页清楚地表明它不再忙于等待。

In order to support applications requiring much more precise pauses (e.g., in order to control some time-critical hardware), nanosleep() would handle pauses of up to 2 milliseconds by busy waiting with microsecond precision when called from a thread scheduled under a real-time policy like SCHED_FIFO or SCHED_RR. This special extension was removed in kernel 2.5.39, and is thus not available in Linux 2.6.0 and later kernels.

关于c - nanosleep(),usleep()中产生CPU所需的最短时间量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60232117/

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