This question already has answers here:
Is getting the thread ID expensive in terms of performance?

(3个答案)


2年前关闭。




我将在代码中非常关键的性能位置使用当前正在运行的线程的ID,因此我应该选择是将该ID缓存在某个地方还是调用方法(对于Unix类系统为gettid,对于Windows为GetCurrentThreadId)每次。那么哪个更好呢?获取线程ID是系统调用吗?

最佳答案

至少在Windows中,GetCurrentThreadId()非常便宜,并且不涉及系统调用。基本上,它的工作原理是:

int GetCurrentThreadId() {
    _asm {
        mov eax, fs:[18h]
        mov eax, [eax+24h]
    }
}

将值缓存在您自己的变量中可能会有一点好处,但不是很多。主要的好处可能是,如果将变量与其他常用变量一起存储,则可以提高局部性(并因此提高缓存的使用率)。

因此,除非您处于一个紧密的循环中,以至于消除内存访存(或可能两个)的可能性非常大,否则您不可能通过缓存其返回的值来获得很多 yield 。

09-25 21:16