我正在尝试评估usleep std::this_thread::sleep_for,并看到在使用std::this_thread::sleep_for与usleep时生成的更多指令。
结果:https://godbolt.org/g/ZyCCmj
int main(int, char**)
{
std::this_thread::sleep_for(std::chrono::milliseconds{30});
usleep(30000);
return 0;
}在使用std::this_thread::sleep_for时,我看到的是< 10条关于睡眠的指令,但> 20条。
我们认为睡眠比std::this_thread::sleep_for有效得多,这是真的吗?
发布于 2018-03-03 07:16:06
我们认为睡眠比std::this_thread::sleep_for有效得多,这是真的吗?
不是的。在上面的代码中,nanosleep(2)是一个系统调用,usleep(3)是一个库函数。usleep(3) 内部调用 nanosleep(2).因此,如果使用usleep(3),您无法在自己的程序中看到这些汇编代码,但是它们存在于库函数本身中。
然而,如果您的程序打算睡觉,也许讨论睡眠功能的性能是毫无意义的。
此外,std::this_thread::sleep_for更具有可移植性,这应该是首选。usleep()甚至在POSIX标准中被标记为过时。
发布于 2018-03-03 06:48:41
您可以看到,您比较了不同的函数nanosleep和usleep。C++ STL之所以使用nanosleep,是因为它的API中理论上可用的时间粒度较少,只有纳秒而不是微秒。
nanosleep的另一个优点是,这两个函数都可以被中断,nanosleep将返回剩余时间,这样STL sleep_for可以在循环中重新运行nanosleep,直到剩余时间过期为止。使用usleep时,您永远不知道在发生中断时什么是实时过期的。
https://stackoverflow.com/questions/49081422
复制相似问题