首页 > 其他分享 >pthread与tbb中各种锁的对比测试

pthread与tbb中各种锁的对比测试

时间:2024-02-28 09:00:44浏览次数:23  
标签:自旋 互斥 mutex 测试 pthread 线程 tbb spinlock

 pthread中提供的锁有:pthread_mutex_t, pthread_spinlock_t, pthread_rwlock_t。
    pthread_mutex_t是互斥锁,同一瞬间只能有一个线程能够获取锁,其他线程在等待获取锁的时候会进入休眠状态。因此pthread_mutex_t消耗的CPU资源很小,但是性能不高,因为会引起线程切换。
    pthread_spinlock_t是自旋锁,同一瞬间也只能有一个线程能够获取锁,不同的是,其他线程在等待获取锁的过程中并不进入睡眠状态,而是在CPU上进入“自旋”等待。自旋锁的性能很高,但是只适合对很小的代码段加锁(或短期持有的锁),自旋锁对CPU的占用相对较高。
    pthread_rwlock_t是读写锁,同时可以有多个线程获得读锁,同时只允许有一个线程获得写锁。其他线程在等待锁的时候同样会进入睡眠。读写锁在互斥锁的基础上,允许多个线程“读”,在某些场景下能提高性能。
   诸如pthread中的pthread_cond_t, pthread_barrier_t, semaphone等,更像是一种同步原语,不属于单纯的锁。

    TBB中提供的锁有:
         mutex                      互斥锁,等同于pthread中的互斥锁(实际上就是对pthread_mutex_t进行封装)
         recurisive_mutex     可重入的互斥锁,在pthread_mutex_t的基础上加了一个可重入的属性
         spin_metux             自旋锁,与pthread_spinlock_t类似,但是性能比pthread_spinlock_t低28%
         queuing_metux       公平的互斥锁,严格按照等待锁的先后顺序获得锁
         spin_rw_mutex        读写自旋锁,功能与pthread_rwlock_t一致,但是性能比pthread_rwlock_t高很多
         queuing_rw_mutex 公平的读写读写锁,也是严格按照等待锁的先后顺序获得锁

    以下是我对一个拥有3667527个节点的HASH表进行读操作所花费的时间,可以说明各种锁的性能:
    (多线程的环境为:4CPU的电脑上使用四个线程进行同样的度操作,然后取四个线程读取的平均时间)
·单线程不加锁:0.818845s
·多线程使用pthread_mutex_t:120.978713s   (很离谱吧…………我也吓了一跳)
·多线程使用pthread_rwlock_t:10.592172s   (多个线程加读锁)
·多线程使用pthread_spinlock_t:4.766012s
·多个线程使用tbb::spin_mutex:6.638609s     (从这里可以看出pthread的自旋锁比TBB的自旋锁性能高出28%)
·多个线程使用tbb::spin_rw_mutex:3.471757s (并行读的环境下,这是所有锁中性能最高的)

    OK,有了以上的测试结果,何种环境该使用何种锁,不辨自明。

标签:自旋,互斥,mutex,测试,pthread,线程,tbb,spinlock
From: https://www.cnblogs.com/kn-zheng/p/18038918

相关文章

  • 关于输出的一些测试
    各种输出方式的比较代码1:#include<bits/stdc++.h>#definerep(i,a,b)for(inti=a;i<=b;++i)usingnamespacestd;signedmain(){ freopen("1.out","w",stdout); rep(i,1,2000000)printf("%d\n",i); return0;}开O2运行时间:3.379secon......
  • 个人题解:2024 年湖北省省队选拔集训暨能力测试 第一试
    时与风对每条边进行BFS。二维偏序部分用vector存一下就行了。花神诞日引理:对于\(a<b<c\),\(\min(a\text{XOR}b,b\text{XOR}c)\leqa\text{XOR}c\)。证明:考虑比较\(a,c\)二进制下第一位不同,也就是\(a=(X0\dots)_{(2)},c=(X1\dots)_{2}\)。因为\(b\in(a,c)\)所以......
  • 2024.02.19 测试
    BeforewritingAlltheproblemsin2024.02.18测试and2024.02.19测试inhere:linkT1素数Linkgxyzoj:#3598素数Luogu:UVA1210连续素数之和UVa:1210-SumofConsecutivePrimeNumbersDescriptionSomepositiveintegerscanberepresentedbyasumofo......
  • 衡量测试人员质量的指标
    1、测试覆盖率:(已设计测试用例的需求数/需求总数)*100%2、测试执行率:已执行用例数/用例总数3、缺陷有效率:有效缺陷数/缺陷总数4、缺陷探测率:测试发现/(测试发现+客户发现)5、缺陷关闭平均时长:从修复到关闭平均时间6、用例命中率:发现缺陷用例数/用例总数开发质量指标:冒烟通过......
  • RunnerGo UI自动化测试脚本如何配置
    RunnerGo提供从API管理到API性能再到可视化的API自动化、UI自动化测试功能模块,覆盖了整个产品测试周期。RunnerGoUI自动化基于Selenium浏览器自动化方案构建,内嵌高度可复用的测试脚本,测试团队无需复杂的代码编写即可开展低代码的自动化测试。 以一条简单的搜索场景为例,本文......
  • 如何创建自己的Spring Boot Starter并为其编写单元测试
    当我们想要封装一些自定义功能给别人使用的时候,创建SpringBootStarter的形式是最好的实现方式。如果您还不会构建自己的SpringBootStarter的话,本文将带你一起创建一个自己的SpringBootStarter。快速入门创建一个新的Maven项目。第三方封装的命名格式是xxx-spring-boo......
  • 性能测试-并发用户数估算指南
    一、引言在软件性能测试中,并发用户数的准确估算至关重要。它直接影响到系统的负载能力、用户体验以及业务目标的达成。本指南旨在提供一套完整的并发用户数估算方法,结合业务场景、系统资源和负载测试等多个方面,以帮助测试工程师和开发人员更准确地估算并发用户数。二、估算方法......
  • 人工智能引领软件测试新的巨大变革
    在当今快节奏的软件开发环境中,高质量的软件交付变得至关重要。为了满足用户对质量和性能的不断增长的期望,软件开发团队正在积极探索新的方法来加速开发周期并提高软件的质量。人工智能技术的发展为自动化测试带来了革命性的变革,使得软件测试工作可以更高效、更智能地进行。本文将......
  • 金三银四,聊一聊测试跳槽/面试的必备技能
    “金三银四”正是大厂春招旺季,最近霍格沃兹测试学社也是捷报频传,很多同学顺利拿下测试开发高薪Offer,但也有不少测试同学虽技术实力尚可,但在面试中却屡屡碰壁,铩羽而归。如何写能让面试官眼前一亮项目经验怎么写才能有理有据有亮点企业招聘模型及面试流程介绍面试技巧-教你高分......
  • 第十六期产品测试沙龙在深圳前海成功举办!
        2024年2月25日下午,为响应深圳市政府提出的“激发创新活力,提升发展质量”的号召,深圳测试协会第十六期沙龙深圳前海深港青年梦工场成功举办! 本次沙龙以“测试驱动·质量引领”为主题进行开展,沙龙以专家线上和线下分享的方式进行。通过国内产品测试专家优秀实践分享、......