我正在尝试评估 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;
}
我在 usleep 中看到 < 10 条指令,但在使用 std::this_thread::sleep_for 时看到 > 20 条指令。
与 std::this_thread::sleep_for 相比,usleep 更有效的结论是否正确?
最佳答案
Is it true to conclude that usleep is much more efficient compared to std::this_thread::sleep_for?
没有。在你上面的代码中,nanosleep(2)
是一个系统调用,usleep(3)
是一个库函数。 usleep(3)
内部调用 nanosleep(2)
。因此,如果您使用 usleep(3)
,您将无法在自己的程序中看到这些汇编代码,但它们存在于库函数本身中。
但是,如果您的程序旨在休眠,那么讨论休眠函数的性能可能毫无意义。
此外,std::this_thread::sleep_for
更具可移植性,应该是首选。 usleep()
甚至在 POSIX standard 中被标记为已过时.
关于c++ - 代码生成 - usleep 与 std::this_thread::sleep_for,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49081422/