This question already has answers here:
Is getting the thread ID expensive in terms of performance?
(3个答案)
2年前关闭。
我将在代码中非常关键的性能位置使用当前正在运行的线程的ID,因此我应该选择是将该ID缓存在某个地方还是调用方法(对于Unix类系统为
将值缓存在您自己的变量中可能会有一点好处,但不是很多。主要的好处可能是,如果将变量与其他常用变量一起存储,则可以提高局部性(并因此提高缓存的使用率)。
因此,除非您处于一个紧密的循环中,以至于消除内存访存(或可能两个)的可能性非常大,否则您不可能通过缓存其返回的值来获得很多 yield 。
(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