2013-02-21 77 views
8

我将在我的代码中使用当前正在运行的线程的id,因此我应该选择是否在某处缓存该id或调用方法(对于类Unix系统,请使用gettid,对于windows请使用GetCurrentThreadId)每次都得到它。那哪个更好?线程ID是系统调用吗?获得当前线程时间id的操作是否昂贵?

回答

0

不,这不是一个昂贵的电话。这是一个系统调用或类似的,但远非昂贵的。很明显,如果你可以缓存一个简单的变量值,那么它会使其速度提高10倍。

但是,与所有与性能相关的查询一样,它确实取决于你的基准测试。你可以很容易地设置一些东西来使用单个线程,调用函数来获取线程ID,并做你想做的事情。测量运行一些测试需要多长时间。然后用相同范围内的一个常数值替换线程ID的调用,并查看结果如何。

7

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

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

在自己的变量中缓存值可能有一点好处,但不是很多。如果您将变量与其他常用变量一起存储,这可能会提高局部性(并因此缓存使用率),主要好处可能在于。因此,除非你正在研究如此紧密的循环以消除内存获取(或可能是两个)的可能性很大,否则通过缓存它返回的值不太可能获得太多收益。

+1

我见过Unix(es)做同样的事情(但与gs,并不重要)。所以你的答案对于多个平台是正确的。这很便宜。 – boiler96 2013-02-21 17:58:42

相关问题