获取当前线程id的操作时间昂贵
Is operation of getting id of current thread time expensive?
我将在代码中性能非常关键的位置使用当前运行线程的id,所以我应该选择是将该id缓存在某个地方,还是每次调用一个方法(对于类unix系统为gettid
,对于windows为GetCurrentThreadId
)来获取它。那么,哪一个更好呢?获取线程id是系统调用吗?
至少在Windows中,GetCurrentThreadId()
非常便宜,而且不涉及系统调用。基本上它的结果是:
int GetCurrentThreadId() {
_asm {
mov eax, fs:[18h]
mov eax, [eax+24h]
}
}
将值缓存在您自己的变量中可能会有一点好处,但不是很多。主要的好处可能是将变量与其他常用变量一起存储,这可以提高局部性(从而提高缓存使用率)。
因此,除非你正在处理一个如此紧密的循环,以至于消除一次(或两次)内存提取的可能性很大,否则你不太可能通过缓存它返回的值来获得太多好处。
不,这不是一个昂贵的调用。这是一个系统调用或类似的调用,但远不是一个昂贵的调用。显然,如果您可以将值缓存在一个简单的变量中,那么这将使其速度加快10倍。
但是,就像所有与性能相关的查询一样,这实际上取决于您的基准测试。你可以很容易地设置为使用单个线程,调用函数来获取线程ID,然后做你想做的事情。测量用它运行一些测试需要多长时间。然后用相同范围内的常数值替换对线程ID的调用,看看结果如何。
相关文章:
- C++为构建时间获取QDateTime的可靠方法
- 在SQLITE数据库中写入记录需要花费大量时间.如何提高刀片操作效率?
- 以毫秒级精度对日期和时间进行操作
- 如何计划在将来时间运行的操作
- 程序执行基本操作所花费的总时间
- 从长时间中提取每个单词的钻头操作
- std::list c++是连续的,那么在序列中的任何位置插入和擦除操作都需要恒定的时间
- 如何使生成的线程拖延足够长的时间以使生成线程执行某些操作
- 在 QThread 中运行长时间操作并将信号发送到主线程仍会冻结 UI
- 在C++中的代码中指定的某个等待时间后执行某个操作
- 测试一个操作在Qt中花费多少时间的最简单方法
- 汇编操作的时间
- 具有c++标准规定的时间复杂度的操作能否动态分配内存?
- 是否有一种可编程的方法来估计CPU执行fp操作所需的时间
- Boost:如何处理依赖于时间的线程操作
- 具有常数时间操作的数据结构
- 为什么ctime clock()在同一个程序对同一个操作调用两次时给出不同的时间?
- 获取当前线程id的操作时间昂贵
- 计算c++中操作之间的时间长度
- std::vector<void*>::保留 O(1) 时间操作的参数是什么?