我试图评估usleep vs std :: this_thread :: sleep_for并查看使用std :: this_thread :: sleep_for vs usleep时生成的更多指令。
结果在这里: https://godbolt.org/g/ZyCCmj
int main(int, char**)
{
std::this_thread::sleep_for(std::chrono::milliseconds{30});
usleep(30000);
return 0;
}
我看到<使用usleep的10条说明但是> 20使用std :: this_thread :: sleep_for。
与std :: this_thread :: sleep_for相比,usleep的效率是否正确?
答案 0 :(得分:6)
与std :: this_thread :: sleep_for相比,usleep的效率是否正确?
没有。在上面的代码中,nanosleep(2)
是系统调用,usleep(3)
是库函数。 usleep(3)
内部调用nanosleep(2)
。因此,如果您使用usleep(3)
,则无法在自己的程序中看到这些汇编代码,但它们存在于库函数本身内。
但是,如果您的程序打算睡觉,那么讨论睡眠功能的表现可能毫无意义。
此外,std::this_thread::sleep_for
更便携,应该首选。在POSIX standard中,usleep()
甚至被标记为已过时。