当前位置: 首页 > news >正文

线程锁和协程锁的区别

转自:chatgpt

1.bthread_mutex_t

bthread_mutex_t 是 brpc 框架提供的一种互斥锁,专门为 bthread(轻量级线程) 设计,具有以下特点:

  1. 适用于 bthread 调度模型

    • bthread_mutex_t 是为 brpc 中的 bthread 设计的互斥锁。
    • 在 brpc 中,bthread 是轻量级的线程(协程),它们由 brpc 的调度器管理,而非直接由操作系统调度。
  2. 非阻塞调度

    • 如果一个 bthread 在尝试获取 bthread_mutex_t 时被阻塞,调度器会将该 bthread 挂起,并切换到其他可以运行的 bthread
    • 这种机制避免了因为锁等待而浪费 CPU 资源。
  3. 高并发优化

    • 适合高并发场景,尤其是 brpc 框架内部大量使用 bthread 的情况下,bthread_mutex_t 能最大程度利用其调度特性。
  4. 性能优化

    • 在轻量级线程上下文中,bthread_mutex_tstd::mutex 更高效,因为它减少了线程上下文切换的开销。
适用场景
  • 协程场景:如果代码运行在 bthread 上,例如 brpc 的 RPC 逻辑中,应该使用 bthread_mutex_t
  • bthread 的友好支持:能更好地利用 brpc 框架的协程调度能力。
限制
  • 只能用于 bthread 上下文中。如果直接在普通线程(非 bthread)中使用,可能会导致异常行为或性能损失。

2.std::mutex

std::mutex 是 C++ 标准库提供的互斥锁,属于通用锁机制,由操作系统直接管理。

特点
  1. 基于操作系统的线程调度

    • std::mutex 是为操作系统的原生线程(如 pthread 或 Windows thread)设计的。
    • 如果一个线程试图获取锁但被阻塞,该线程会被操作系统挂起,直到锁可用。
  2. 阻塞模型

    • 被阻塞的线程会进入操作系统的等待队列,这可能会导致线程上下文切换,增加性能开销。
  3. 适用范围广

    • 可以在任何线程上下文中使用,无需依赖特定的线程调度器或框架。
适用场景
  • 普通线程场景:适用于不依赖协程调度的程序,例如传统的多线程程序。
  • 兼容性要求:适合与标准 C++ 代码或非 brpc 框架代码协作时使用。
限制
  • 如果在协程或 bthread 场景中使用,std::mutex 的阻塞特性会导致整个线程(包括其他 bthread)被挂起,无法有效利用 brpc 的协程调度能力。

如果你的代码既运行在 brpc 框架内,也可能被外部线程调用,建议仔细规划互斥锁的使用,避免将 bthread_mutex_t 用在普通线程中。

http://www.lryc.cn/news/513115.html

相关文章:

  • 手机租赁平台开发助力智能设备租赁新模式
  • 掌握大数据处理利器:Flink 知识点全面总结【上】
  • 人工智能知识分享第四天-线性回归
  • Appium 2.0:移动自动化测试的革新之旅
  • 牛客网最新1129道 Java 面试题及答案整理
  • Swift Combine 学习(六):自定义 Publisher 和 Subscriber
  • Vue-router知识点汇总
  • java AQS
  • L25.【LeetCode笔记】 三步问题的四种解法(含矩阵精彩解法!)
  • sdut-C语言实验-合数分解
  • 深入理解 pytest Fixture 方法及其应用
  • 在Linux上获取MS(如Media Server)中的RTP流并录制为双轨PCM格式的WAV文件
  • Midjourney技术浅析(八):交互与反馈
  • 【Spring MVC 核心机制】核心组件和工作流程解析
  • 回归问题的等量分层
  • Unity-Mirror网络框架-从入门到精通之Basic示例
  • CSS 图片廊:网页设计的艺术与技巧
  • AI 发展的第一驱动力:人才引领变革
  • [创业之路-229]:《华为闭环战略管理》-5-平衡记分卡与战略地图
  • 用uniapp写一个播放视频首页页面代码
  • 【视觉SLAM:八、后端Ⅰ】
  • PaddleOCROCR关键信息抽取训练过程
  • 用Python操作字节流中的Excel文档
  • python 桶排序(Bucket Sort)
  • Elasticsearch:探索 Elastic 向量数据库的深度应用
  • 【每日学点鸿蒙知识】属性变量key、waterflow卡顿问题、包无法上传、Video控件播放视频、Vue类似语法
  • 小程序中引入echarts(保姆级教程)
  • 基于 Node.js 的 ORM(对象关系映射)工具——Sequelize介绍与使用,并举案例分析
  • python 插入排序(Insertion Sort)
  • 电子应用设计方案81:智能AI冲奶瓶系统设计