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

【中间件】brpc_基础_bthread头文件

bthread.h学习笔记

源码

1 概述

bthread.h 定义了一个用户级线程库,提供类似 POSIX 线程(pthread)的功能,但针对高并发和调度优化进行了扩展。支持线程管理、同步原语、中断机制、线程特定数据等功能,适用于需要高效协程管理的场景。


2 核心功能模块

2.1 线程创建与管理

  • 启动模式
    • Urgent (bthread_start_urgent):立即切换至新线程,适合高优先级任务。
    • Background (bthread_start_background):类似 pthread_create,启动后返回,新线程可能延迟执行。
  • 线程控制
    • bthread_exit:终止当前线程。
    • bthread_join:等待线程结束(所有线程默认可连接,但返回值固定为 NULL,需通过参数传递结果)。
    • bthread_self:获取当前线程 ID。
    • bthread_yield:主动让出 CPU(调度公平性可能不足)。

2.2 中断与停止

  • 中断机制
    • bthread_interrupt:唤醒阻塞中的线程(如 bthread_usleep 返回错误,bthread_cond_wait 唤醒)。
    • bthread_stop:设置停止标志并中断线程,需线程内部检查 bthread_stopped 退出。
  • 协作式退出:需用户代码主动检查停止标志,避免资源泄漏。

2.3 同步原语

  • 互斥锁 (bthread_mutex_*)
    • 初始化时属性可能被忽略(建议传 NULL)。
    • 支持 trylocktimedlock
  • 条件变量 (bthread_cond_*)
    • 需与互斥锁配合使用,支持超时等待 (bthread_cond_timedwait)。
  • 读写锁 (bthread_rwlock_*)
    • 支持读写分离锁,可配置偏好(读优先/写优先)。
  • 信号量 (bthread_sem_*)
    • 提供 post_n 批量释放信号量。
  • 屏障 (bthread_barrier_*)
    • 多线程同步点,等待指定数量的线程到达。

2.4 线程特定数据 (TSD)

  • key管理
    • bthread_key_create/bthread_key_delete:创建/销毁键。
    • bthread_setspecific/bthread_getspecific:设置/获取线程本地数据。
  • 性能提示:短生命周期线程慎用 TSD,避免频繁分配键表。

2.5 调度与并发控制

  • 并发度调整
    • bthread_setconcurrency:设置工作线程(底层 pthread)数量。
    • 按标签管理bthread_setconcurrency_by_tag 支持为不同任务类别分配独立并发度。
  • CPU 时间统计
    • bthread_cpu_clock_ns:获取线程 CPU 时间(需启用 bthread_enable_cpu_clock_stat)。

2.6 工具函数

  • 一次性初始化
    • bthread_once:确保初始化代码仅执行一次。
  • 列表管理
    • bthread_list_*:批量管理线程(非线程安全,需外部同步)。

3 关键设计特点

  1. 协作式调度

    • bthread_yield 和同步原语可能触发线程切换,但调度公平性有限,需避免长耗时操作独占 CPU。
  2. 轻量级中断

    • 通过标志位 + 中断唤醒协作退出,避免强制终止导致的资源问题。
  3. 高效同步

    • 同步原语可能基于用户态实现,减少内核切换开销(如信号量 post_n 批量操作)。
  4. 标签化并发

    • 允许不同任务类型(如计算密集型、I/O 密集型)使用独立并发度,优化资源利用。

4 使用注意事项

  • 错误处理:函数返回 0 表示成功,错误码需通过返回值或 errno 检查。
  • 线程生命周期:短线程慎用 TSD,避免性能损耗。
  • 中断兼容性:不同阻塞函数对中断的反应不同(如 bthread_usleep 返回 ESTOP,而 bthread_mutex_lock 不受影响)。
  • 资源回收:所有线程默认可连接,但需手动调用 bthread_join 确保资源释放。

5 示例场景

// 创建高优先级线程并等待
bthread_t tid;
bthread_start_urgent(&tid, NULL, my_func, my_args);
bthread_join(tid, NULL);// 使用条件变量同步
bthread_mutex_lock(&mutex);
while (!condition) {bthread_cond_wait(&cond, &mutex);
}
bthread_mutex_unlock(&mutex);// 中断处理
void* worker(void* arg) {while (!bthread_stopped(bthread_self())) {// 工作逻辑}return NULL;
}
bthread_stop(tid); // 触发退出

6 总结

bthread 提供了高性能的用户级线程管理,适用于需要细粒度并发控制的场景。开发者需结合其协作式调度、中断机制和同步原语特性,合理设计线程逻辑,以充分发挥其优势。

相关文章:

【中间件】brpc_基础_bthread头文件

bthread.h学习笔记 源码 1 概述 bthread.h 定义了一个用户级线程库,提供类似 POSIX 线程(pthread)的功能,但针对高并发和调度优化进行了扩展。支持线程管理、同步原语、中断机制、线程特定数据等功能,适用于需要高效…...

【AI面试准备】Git与CI/CD及单元测试实战指南

介绍Git、CI/CD 流程、单元测试框架(如 NUnit、JUnit)。如何快速掌握,以及在实际工作中如何运用 目录 一、Git:分布式版本控制系统核心概念高频命令实战建议 二、CI/CD:自动化交付流水线核心流程工具链组合关键配置示…...

个人健康中枢的多元化AI软件革新与精准健康路径探析

引言 人工智能技术的迅猛发展正在重塑医疗健康领域的服务模式和用户体验。随着多模态大模型、MCP协议、A2A协议和思考链算法等创新技术的出现,个人健康中枢正在经历一场深刻的软件革新。这些技术不仅打破了传统健康管理系统的信息孤岛,还通过多维度数据整合和深度推理能力,…...

Java文件上传

war包利用 WAR包结构详解-CSDN博客 Tomcat弱口令及war包漏洞复现(保姆级教程)-CSDN博客 Tomcat 8.x弱口令获取manager权限上传任意war包漏洞复现 - Stunmaker - 博客园...

Python项目源码63:病历管理系统1.0(tkinter+sqlite3+matplotlib)

1.病历管理系统包含以下主要功能: 核心功能:病历信息录入(患者姓名、年龄、性别、诊断结果、主治医生),自动记录就诊时间,病历信息展示(使用Treeview表格),病历信息查询…...

Unity 与 Lua 交互详解

Unity 与 Lua 的交互是热更新实现的核心技术,下面我将从底层原理到实际应用全面解析交互机制。 一、交互基础原理 1. 通信架构 Unity (C#) 原生层↑↓ 通过P/Invoke调用 Lua虚拟机层 (C/C实现)↑↓ Lua脚本解释执行 业务逻辑层 (Lua脚本) 2. 数据类型映射表 Lu…...

【Vue】Vue与UI框架(Element Plus、Ant Design Vue、Vant)

个人主页:Guiat 归属专栏:Vue 文章目录 1. Vue UI 框架概述1.1 主流Vue UI框架简介1.2 选择UI框架的考虑因素 2. Element Plus详解2.1 Element Plus基础使用2.1.1 安装与引入2.1.2 基础组件示例 2.2 Element Plus主题定制2.3 Element Plus的优缺点分析 3…...

期刊、出版社、索引数据库

image 1、研究人员向期刊或者会议投稿,交注册费和相应的审稿费等相关费用[1]; 2、会议组织者和期刊联系出版社,交出版费用; 3、出版社将论文更新到自己的数据库中,然后将数据库卖给全世界各大高校或企业; 4…...

btrace2.0使用方法

2022 年我研究安卓性能优化的时候,写过一篇:btrace1.0使用方法 - Wesley’s Blog,现在 brace 进化到 2.0 了,让我们一起来看看如何使用。 具体的接入流程可以看官方文档: bytedance/btrace: 🔥&#x1f5…...

【计算机视觉】三维视觉:Instant-NGP:实时神经辐射场的革命性突破

深度解析Instant-NGP:实时神经辐射场的革命性突破 技术架构与核心创新哈希编码(Hash Encoding)性能对比 环境配置与安装指南硬件要求全平台安装流程 实战全流程解析1. 数据准备2. 训练与重建3. 结果导出与应用 核心技术深度解析哈希编码实现混…...

组件通信-provide、inject

概述&#xff1a;实现祖孙组件直接通信 具体使用&#xff1a; 在祖先组件中通过provide配置向后代组件提供数据 在后代组件中通过inject配置来声明接收数据 具体编码&#xff1a; 【第一步】父组件中&#xff0c;使用provide提供数据 父组件&#xff1a; <template&g…...

定制开发开源AI智能名片S2B2C商城小程序驱动的无界零售基础设施变革研究——基于京东模式的技术解构与商业重构

摘要&#xff1a;本文以京东无界零售战略为参照&#xff0c;探讨定制开发开源AI智能名片S2B2C商城小程序如何通过“技术赋能生态重构”双轮驱动&#xff0c;重塑零售基础设施的可塑化、智能化与协同化。研究显示&#xff0c;该模式通过“AI名片智能中枢S2B2C分布式网络开源技术…...

基于STM32的带恒温系统智能外卖柜设计

标题:基于STM32的带恒温系统智能外卖柜设计 内容:1.摘要 随着外卖行业的迅速发展&#xff0c;对外卖存放设备的智能化和功能性要求日益提高。本设计的目的是开发一种基于STM32的带恒温系统智能外卖柜。方法上&#xff0c;以STM32微控制器为核心&#xff0c;结合温度传感器、加…...

ARM架构详解:定义、应用及特点

一、ARM架构的定义 ARM&#xff08;Advanced RISC Machine&#xff09; 是一种基于精简指令集&#xff08;RISC&#xff09;的处理器架构&#xff0c;由ARM公司&#xff08;现属英伟达&#xff09;设计&#xff0c;以低功耗、高能效为核心目标。其商业模式为IP授权&#xff0c…...

Spring Boot 集成 Elasticsearch 的详细步骤

以下是 Spring Boot 集成 Elasticsearch 的详细步骤&#xff1a; 环境安装 安装 Java &#xff1a;Elasticsearch 基于 Java&#xff0c;需先安装 JDK 11 或更高版本。从官 方网站下载安装包&#xff0c;按教程安装配置&#xff0c;安装后通过命令行输入java -version验证。 …...

提示词版本化管理:AI开发中被忽视的关键环节

当我的提示词"消失"在团队协作中 上周五下午&#xff0c;我经历了一场小型"灾难"。作为一名AI产品经理&#xff0c;我花了整整三天精心打磨的客服机器人提示词&#xff0c;在周末更新后突然"失效"了。机器人不再能够准确识别用户意图&#xff0…...

专题二十二:DHCP协议

一、DHCP简介 HCP是Dynamic Host Configuration Protocol的缩写&#xff0c;即动态主机配置协议。DHCP是一个很重要的局域网的网络协议&#xff0c;DHCP使用UDP封装的67和68端口&#xff0c;DHCP客户端使用68端口&#xff0c;DHCP服务器使用67端口进行回应。 DHCP可以提供两种…...

轻量级在线Excel预览工具

轻量级在线Excel预览工具 简介 在日常工作中&#xff0c;我们经常需要快速查看Excel文件的内容&#xff0c;但不一定总是需要打开完整的Excel软件。为了解决这个问题&#xff0c;我开发了一个轻量级的在线Excel预览工具&#xff0c;让您可以通过浏览器快速查看Excel文件内容。…...

【OFDM过程中正交子载波特性的应用及全面解析】

OFDM过程中正交子载波特性的应用及全面解析 一、正交子载波的核心作用 正交子载波是OFDM技术的基石&#xff0c;其特性贯穿整个发送和接收流程&#xff1a; 正交性定义 子载波频率间隔为符号速率的倒数&#xff08; Δ f 1 T \Delta f \frac{1}{T} ΔfT1​&#xff09;&…...

旧版本NotionNext图片失效最小改动解决思路

旧版本NotionNext图片失效最小改动解决思路 契机 好久没写博客了&#xff0c;最近在notion写博客的时候发现用notionNext同步到个人网站时&#xff0c;图片无法预览。猜测是notion加了防盗链措施&#xff0c;去notionNext官方github上寻找解决方案&#xff0c;需要升级到4.8.…...

4.5 使用busybox制作根文件系统

4.1. 使用busybox制作文件系统 4.1.1 busybox源码下载&#xff1a; 下载地址&#xff1a;Index of /downloads 4.1.2. busybox源码中修改Makefile ARCH arm CROSS_COMPILE /usr/local/arm/arm-2009q3/bin//arm-none-linux-gnueabi-4.1.3. make menuconfig配置busybox &…...

LeetCode[102]二叉树的层序遍历

思路&#xff1a; 题目描述从左到右一层一层的进行遍历&#xff0c;就遍历二叉树的这种题我更喜欢用递归来做&#xff0c; 我使用java来做的&#xff0c;结果集是两个List集合&#xff0c;那么我们是不是应该每到新的一层就给这个结果集添加一个内部的List&#xff0c;那么怎么…...

【C到Java的深度跃迁:从指针到对象,从过程到生态】第五模块·生态征服篇 —— 第二十章 项目实战:从C系统到Java架构的蜕变

一、跨语言重构&#xff1a;用Java重写Redis核心模块 1.1 Redis的C语言基因解析 Redis 6.0源码核心结构&#xff1a; // redis.h typedef struct redisObject { unsigned type:4; // 数据类型&#xff08;String/List等&#xff09; unsigned encoding:4; // …...

implement the “pixel-wise difference“

根据在处理图像数据的来源和格式的不同&#xff0c;在具体实现“两幅图像残差比较”的时候&#xff0c;分为两类方法。 类型一&#xff1a;PyTorch 的 Tensor 图像格式 imgs_pil_o [transforms.ToPILImage()(img_o) for img_o in imgs_o] imgs_pil_w [transforms.ToPILImag…...

GoogleTest:TEST_F

GoogleTest:简单示例及ASSERT/EXPECT说明-CSDN博客 介绍了写一个简单的测试用例 如果某些测试用例在开始测试前需要先做一些准备工作,那么如果每次都需要先准备,那么会比较的麻烦,基于这种情况可以使用GoogleTest的TEST_F方法。 简单点说,就是需要先定义一个继承于testin…...

【优选算法 | 位运算】位运算基础:深入理解二进制操作

算法相关知识点可以通过点击以下链接进行学习一起加油&#xff01;双指针滑动窗口二分查找前缀和 在本篇文章中&#xff0c;我们将全面解析位运算的基本原理与实际应用。位运算通过直接操作数字的二进制表示&#xff0c;能够在许多计算中提供极大的效率提升。无论是用于加速数学…...

推荐免费的RVC模型下载网站

前沿 近年来&#xff0c;随着人工智能与计算机生成内容&#xff08;AICG&#xff09;技术的飞速发展&#xff0c;众多人才纷纷投身于这一领域。从ChatGPT到Stable Diffusion&#xff0c;再到RVC&#xff0c;这些广为人知的AI技术正逐步改变我们的生产方式。众所周知&#xff0c…...

写了个脚本将pdf转markdown

看到有人需要将扫描pdf文档转markdown&#xff0c;想起之前写的一个小工具。 这个脚本是为了将pdf转成markdown&#xff0c;只需要申请一个智谱的api key&#xff0c;并填到config里&#xff0c;使用的模型是4v flash&#xff0c;免费的&#xff0c;所以可以放心使用。 效果如下…...

Expected SARSA算法详解:python 从零实现

&#x1f9e0; 向所有学习者致敬&#xff01; “学习不是装满一桶水&#xff0c;而是点燃一把火。” —— 叶芝 我的博客主页&#xff1a; https://lizheng.blog.csdn.net &#x1f310; 欢迎点击加入AI人工智能社区&#xff01; &#x1f680; 让我们一起努力&#xff0c;共创…...

SALOME源码分析: JobManager

本文分析SALOME中的JobManager模块。 注1&#xff1a;限于研究水平&#xff0c;分析难免不当&#xff0c;欢迎批评指正。注2&#xff1a;文章内容会不定期更新。 一、核心组件 二、关键流程 三、FAQs 网络资料 Introduction: What is the JOBMANAGER ?...

冯·诺依曼体系:现代计算机的底层逻辑与百年传承

在智能手机流畅运行复杂游戏、超级计算机模拟气候变化的今天&#xff0c;很少有人会想到&#xff0c;驱动这些神奇机器运转的核心架构&#xff0c;依然遵循着70多年前提出的设计理念。这就是由匈牙利裔美国科学家约翰冯诺依曼&#xff08;John von Neumann&#xff09;奠定的冯…...

10 种微服务设计模式

微服务的优势与挑战 在详细介绍设计模式之前&#xff0c;我觉得有必要先重申下微服务的概念以及它带来的挑战。 微服务是大型应用程序的一个小型、可独立部署的组件&#xff0c;专注于特定功能。每个微服务都运行自己的进程&#xff0c;通常通过 API 与其他服务进行通信&…...

深入拆解 MinerU 解析处理流程

概述 MinerU更新频率也相当频繁,在短短一个月内,更新了10个小版本。 本文结合最新版本v1.3.10,深入拆解下它进行文档解析时的内部操作细节。 MinerU仓库地址:https://github.com/opendatalab/MinerU 环境准备 在之前的文章中,已经安装了magic-pdf(MinerU的解析包名),…...

Nginx部署Vue+ElementPlus应用案例(基于腾讯云)

案例代码链接&#xff1a;https://download.csdn.net/download/ly1h1/90735035 1.参考链接&#xff1a; 基于以下两个链接的参考&#xff0c;创建项目 1.1.基于Vue3前端项目创建-CSDN博客 1.2.基于Vue3引入ElementPlus_vue如何引入elementplus-CSDN博客 2.修改main.js&#…...

设计模式简述(十六)门面模式

门面模式 描述基本组件 描述 门面模式是一种概念相对简单的设计模式。 其核心思想就是&#xff1a;封装内部子系统的复杂调用&#xff0c;提供一个门面对象供外部调用。 基本组件 定义子系统对象&#xff08;这里做了简化&#xff0c;没有声明抽象&#xff09; public clas…...

云原生后端:构建高效、可扩展的现代后端架构

📝个人主页🌹:一ge科研小菜鸡-CSDN博客 🌹🌹期待您的关注 🌹🌹 随着云计算技术的迅猛发展,云原生(Cloud Native)架构已经成为现代软件开发的核心趋势。云原生后端指的是在云环境中构建和部署的后端系统,这些系统具有弹性、可扩展性、自动化运维等特性,能够更…...

基于bert的情感分析程序

文章目录 任务介绍数据概览注意事项数据处理代码准备模型构建与训练模型类构建数据集构建数据批处理模型参数查看模型训练结果推理与评估模型推理准确率评估附录任务介绍 在当今信息爆炸的时代,互联网上充斥着海量的文本数据,如社交媒体评论、产品评价、新闻报道等。这些文本…...

情境领导理论——AI与思维模型【89】

一、定义 情境领导理论思维模型是一种强调领导者应根据下属的成熟度&#xff08;包括工作能力和工作意愿两个方面&#xff09;来调整领导风格&#xff0c;以实现有效领导的动态理论。该模型认为&#xff0c;没有一种放之四海而皆准的领导方式&#xff0c;领导者的行为要与下属…...

WPF之ProgressBar控件详解

文章目录 1. ProgressBar控件简介2. ProgressBar的基本属性和用法2.1 基本属性2.2 基本用法2.3 代码中修改进度 3. 确定与不确定模式3.1 确定模式&#xff08;Determinate&#xff09;3.2 不确定模式&#xff08;Indeterminate&#xff09; 4. 在多线程环境中更新ProgressBar4.…...

计算机网络01-网站数据传输过程

局域网&#xff1a; 覆盖范围小&#xff0c;自己花钱买设备&#xff0c;宽带固定&#xff0c;自己维护&#xff0c;&#xff0c;一般长度不超过100米&#xff0c;&#xff0c;&#xff0c;带宽也比较固定&#xff0c;&#xff0c;&#xff0c;10M&#xff0c;&#xff0c;&…...

泰迪杯特等奖案例学习资料:基于边缘计算与多模态融合的温室传感器故障自诊断系统设计

(第十四届泰迪杯数据挖掘挑战赛A题特等奖案例解析) 一、案例背景与核心挑战 1.1 应用场景与行业痛点 在现代智能温室中,传感器网络是环境调控的核心依据,但其长期运行面临以下挑战: 数据异常频发: 传感器老化:温湿度传感器SHT35的精度在连续使用2年后可能漂移1℃。 环…...

力扣面试150题--分隔链表

day 39 题目描述 思路 遍历链表&#xff0c;每一个点与值比较&#xff0c;比值小就继续&#xff0c;比值大就放到链表尾部即可 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode() {}* ListNode(int…...

Shell 脚本基础

一、Shell 简介 1.Shell 的定义与作用 Shell&#xff0c;通常被称为命令行解释器 (Command Line Interpreter)&#xff0c;是用户 &#x1f464; 与 Linux/Unix 操作系统内核进行交互 ↔️ 的“桥梁” &#x1f309;。它扮演着翻译官 &#x1f5e3;️ 的角色&#xff1a; 接…...

【AI面试准备】元宇宙测试:AI+低代码构建虚拟场景压力测试

介绍元宇宙测试&#xff1a;AI低代码构建虚拟场景压力测试&#xff08;如数字孪生工厂&#xff09;。如何快速掌握&#xff0c;以及在实际工作中如何运用。 目录 **元宇宙测试&#xff1a;AI低代码构建虚拟场景压力测试****一、元宇宙测试的核心挑战与需求**1. **元宇宙测试的独…...

【网络层】之IP协议

网络层之IP协议 网络层的作用IP地址不足的问题私网IP和公网IP网段划分传统的网段划分的方法CIDR网段划分路由器的角色理解运营商的角色子网划分的过程 路由表IP协议介绍报文如何分离、交付 网络层的作用 IP协议是网络层的一种典型协议&#xff0c;只要弄清楚了IP协议的作用&…...

AI编译器对比:TVM vs MLIR vs Triton在大模型部署中的工程选择

引言&#xff1a;大模型部署的编译器博弈 随着千亿参数大模型成为常态&#xff0c;推理延迟优化成为系统工程的核心挑战。本文基于NVIDIA A100与Google TPUv4平台&#xff0c;通过BERT-base&#xff08;110M&#xff09;和GPT-2&#xff08;1.5B&#xff09;的实测数据&#x…...

【dify—10】工作流实战——文生图工具

目录 一、创建工作流 应用 二、安装硅基流动 三、配置硅基流动 四、API测试 &#xff08;1&#xff09;进入API文档 &#xff08;2&#xff09;复制curl代码 &#xff08;3&#xff09;Postman测试API 五、 建立文生图工作流 &#xff08;1&#xff09;建立http请求 &…...

企业级分布式 MCP 方案

飞书原文档链接地址&#xff1a;https://ik3te1knhq.feishu.cn/wiki/D8kSwC9tFi61CMkRdd8cMxNTnpg 企业级分布式 MCP 方案 [!TIP] 背景&#xff1a;现阶段 MCP Client 和 MCP Server 是一对一的连接方式&#xff0c;若当前 MCP Server 挂掉了&#xff0c;那么 MCP Client 便不…...

玩转Docker(一):基本概念

容器技术是继大数据和云计算之后又一炙手可热的技术&#xff0c;而且未来相当一段时间内都会非常流行。 本文将对其基本概念和基本使用做出介绍。包括容器生态系统、容器的原理、怎样运行第一个容器、容器技术的概念与实践、Docker镜像等等 目录 一. 鸟瞰容器生态系统 1. 容器…...

Linux系统安装方式+适合初学者的发行版本

Linux系统安装方式适合初学者发行版—目录 一、Linux系统的安装方式1. 物理机直接安装2. 虚拟机安装3. 双系统安装4. Live USB试用5. 云服务器安装 二、适合初学者的Linux发行版1. Ubuntu2. Linux Mint3. Zorin OS4. Pop!_OS5. Elementary OS6. Fedora7. Manjaro 三、选择建议场…...