BM_SingleLock/threads:3 140 ms 332 ms 3
BM_SingleLock/threads:4 142 ms 405 ms 4
BM_LockStriping_4_Chunks/threads:1 71 ms 69 ms 9
BM_LockStriping_4_Chunks/threads:2 90 ms 178 ms 4
BM_LockStriping_4_Chunks/threads:3 89 ms 248 ms 3
BM_LockStriping_4_Chunks/threads:4 82 ms 299 ms 4
BM_LockStriping_8_Chunks/threads:1 70 ms 69 ms 10
BM_LockStriping_8_Chunks/threads:2 74 ms 143 ms 4
BM_LockStriping_8_Chunks/threads:3 71 ms 198 ms 3
BM_LockStriping_8_Chunks/threads:4 60 ms 200 ms 4同样地,Time代表每个线程的挂钟时间(wall clock time),CPU代表每个线程使用的CPU时间 。另外请注意,由于我的机器只有4个逻辑内核 , 所以这个测试最多只能运行4个线程,因为超出这个范围的任何线程实际上都不会导致任何额外的争用 。
从上面我们可以看到,在单线程的情况下 , LockStripedHashSet无论是分块或不分块,挂钟时钟和CPU时间上的表现都比简单的ThreadSafeHashSet稍差 。
然而,随着线程数量的增加 , 对锁的争用增加,LockStripedHashSet在这种情况下性能要好得多 。在线程数较高的情况下,将数据拆分成8块优于拆分成4块的情况 。
【系统编程】虽然锁定条带化可以帮助减轻对锁的争用,但它的缺点是增加了锁的存储开销 。在我们的示例中 , 7个额外的锁和额外的absl::flat_hash_set簿记的开销对于我们的基准中的一个实例来说是很小的,但是如果你在一个应用程序中用一个8路条带化的线程安全的hash-set替换所有这些散列集,那么你可能会使其内存使用量大大增加 。
结束语
虽然以上还远远不是最常见的系统编程技巧的详尽列表,但希望它能激发你进一步学习的欲望 , 掌握更多的工具来提高你自己的应用程序的性能,或者至少它能让你更容易地理解为什么性能敏感的代码在做它正在做的事情 。
原文:https://paulcavallaro.com/blog/common-systems-programming-optimizations-tricks/
本文为 CSDN 翻译,转载请注明来源出处 。
【End】
相关经验推荐
- 分公司需要营业执照吗
- 葡萄苗6月份能栽活吗视频 葡萄苗6月份能栽活吗
- 兔子要养多久才会生
- 上肉桂是什么东西
- 自制万能花肥营养液 自制万能花肥
- 卡西欧小方块怎么调表带
- 浙江新昌房价 浙江新昌
- 凡尔赛是什么意思
- 金诺三髓粉
- 春天开什么花的名字和图片 春天开什么花的名字
