我正在尝试在我的代码中测试nanosleep的性能。当我调用nanosleep并在0秒和0纳秒内传递时,与不调用nanosleep相比,我得到了一个不同的值。如果我以0作为参数调用nanosleep,难道它不会有任何影响吗?
发布于 2019-10-31 01:18:38
sleep(0)和可能为零的nanosleep为线程提供了一种机制来放弃其剩余的时间片。这实际上是一个线程产量。因此,当调用sleep(0)时,我们进入内核模式,并将线程放入"runnable“队列。然后,当下一个可用时隙变得可用时,该线程被调度来恢复。当发生这种情况时,完全由操作系统决定。
其中一个用例(可能不是最好的用例)是用户空间自旋锁。当“在等待资源时旋转”时,我们调用睡眠(0)。这允许调度可能释放资源的任务,从而更快地释放锁。
发布于 2019-10-31 00:59:38
如果你不想运行一个函数,就不要调用它。
函数有开销。它们需要初始化stackframe,跳到函数代码,完成工作,然后跳回。只有“做好工作”才是可以改变的。
当然,您可以内联函数以跳过跳转和堆栈帧设置,但您始终需要检查参数的值。当涉及到纳米尺度时,即使是像if(x==0)这样简单的东西也需要时间。
这里的问题更多的是哲学上的而不是技术上的。一个函数本身不能确定它是否应该运行,因为它需要被运行来完成所有的事情,包括确定它是否应该运行。
https://stackoverflow.com/questions/58630270
复制相似问题