我将在我的代码中使用当前正在运行的线程的id在一个性能非常关键的位置,因此我应该选择是在某处缓存该id还是为类似unix的系统调用方法(gettid
每次都能得到它。{和GetCurrentThreadId
for windows)哪个更好?获取线程ID是系统调用吗?
答案 0 :(得分:9)
至少在Windows中,GetCurrentThreadId()
相当便宜,并且不涉及系统调用。基本上它可以解决:
int GetCurrentThreadId() {
_asm {
mov eax, fs:[18h]
mov eax, [eax+24h]
}
}
在自己的变量中缓存值可能会有一点好处,但不是很多。主要好处可能是您将变量与其他常用变量一起存储,这可以改善局部性(因此可以改善缓存使用情况)。
所以,除非你正在进行如此紧密的循环,否则消除内存提取(或可能是两次)的可能性很大,你不可能通过缓存它返回的值来获得更多收益。
答案 1 :(得分:1)
不,这不是一个昂贵的电话。这是一个系统调用或类似的,但远非昂贵的。显然,如果你可以将值缓存在一个简单的变量中,那么它会使它快10倍。
但是与所有与性能相关的查询一样,它实际上取决于您的基准测试。您可以非常轻松地设置使用单个线程,调用函数来获取线程ID,并执行您想要执行的操作。测量用它运行一些测试所需的时间。然后用相同范围内的常量值替换线程ID的调用,看看它是如何工作的。