代码生成 - usleep vs std :: this_thread :: sleep_for

Kob*_*obi 1 c++ c++11

我试图评估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;
}
Run Code Online (Sandbox Code Playgroud)

我在使用std :: this_thread :: sleep_for时看到带有usleep的<10条指令但是> 20条.

是否真的可以得出结论,与std :: this_thread :: sleep_for相比,usleep更有效率?

lll*_*lll 6

是否真的可以得出结论,与std :: this_thread :: sleep_for相比,usleep更有效率?

在上面的代码中,nanosleep(2)是一个系统调用,usleep(3)是一个库函数.usleep(3)内部呼叫nanosleep(2).因此,如果您使用usleep(3),则无法在自己的程序中看到这些汇编代码,但它们存在于库函数本身中.

但是,如果您的程序打算睡觉,那么讨论睡眠功能的性能可能毫无意义.

而且,std::this_thread::sleep_for更便携,这应该是首选.usleep()POSIX标准中甚至被标记为过时.