asio中的锁

news/2024/7/8 4:26:45

asio到底有没有锁

asio是有锁的,所以规避锁的写法还是值得研究的

windows中的锁

先来张截图:

dispatch_mutex_主要是为了保护定时器队列和完成端口回调的队列。

保护定时器队列

保护完成端口回调的队列

在PostQueuedCompletionStatus失败时,放入completed_ops_中,以便下一次事件到来,再次尝试从completed_ops_取执行
在这里插入图片描述

windows中 每个线程一个io_context 和 多个线程一个io_context

先来看看 最熟悉的 io_context.run() 的实现:
在这里插入图片描述
只要 do_one函数不返回0,run函数会一直循环下去。run函数实现没有用到锁。再看看do_one函数的实现:

折叠起来的代码不包含锁,那么只有dispatch_required_ 为1时,才会出现锁竞争:

  1. 定时器添加
  2. completed_ops_不为空,即PostQueuedCompletionStatus函数失败(基本不会)

所以在没有大量高频触发的定时器前提下,windows平台 每个线程一个io_context 和 多个线程一个io_context 性能基本没有区别。

linux中的锁

先来张截图:
在这里插入图片描述
mutex_为了保护内部数据,这个注释给人的第一感觉就是 锁范围明显要比windows要大了。

保护Proactor回调的队列

在这里插入图片描述

linux中 每个线程一个io_context 和 多个线程一个io_context

先来看看 最熟悉的 io_context.run() 的实现:

只要 do_one函数不返回0,run函数会一直循环下去。首先锁住do_run_one函数,再看看do_one函数的实现:

简单看一下,折叠的代码里面调用的是epoll_wait。
如果有多个回调operation需要处理则 more_handlers=true,且有多个线程则 one_thread_=false,那么唤醒一个线程且释放锁,让其他线程再去抢剩余的回调operation。
所以Linux平台最好使用 1 io_context per thread 模型 避免锁带来的影响。


http://lihuaxi.xjx100.cn/news/1538452.html

相关文章

机器视觉方案工程师,价值远不止于此

机器视觉方案工程师,很少出差,受到很多机器视觉工程师的追捧,那我们看下主要的工作职责和任职要求: 岗位职责: 1、负责机器视觉检测系统光学方案选型,主要为光源,相机镜头的选型评估; 2、负责机器视觉光学系统的设计、搭建、测试,具体是指:机器视觉中光学成像方案设…

【Vue】

Vue 简介 Vue.js(通常简称为Vue)是一种流行的JavaScript前端框架,用于构建交互式和动态的用户界面(UI)。Vue的特点包括: 轻量级:Vue.js是一个轻量级框架,文件大小小,易于…

TCP通信测试

一、TCP通信测试: 创建TCP Server: 选中左方的TCP Server, 然后点击”创建”按钮,软件弹出监听端口输入框 输入监听端口后,即创建了一个在指定端口上进行监听的TCP Server Socket。TCP Server Socket创建时,软件会自动启动TCP Se…

5. spark 参数问题

官网地址&#xff1a;spark 参数 在代码中设置参数 spark-default.conf < 命令行< 代码内部设置参数&#xff0c; 对于一常用的参数可以放在配置文件&#xff0c;对于一些个性化参数则通过 命令行传递比较好。 命令行 命令行传递参数&#xff0c;有一些快捷方式&…

点云从入门到精通技术详解100篇-基于光谱共焦系统的三维点云数据处理

目录 前言 国内外研究现状 点云基础和相关技术研究 2.1 点云数据格式 2.1.1 LAS 格式

蚂蚁发布金融大模型:两大应用产品支小宝2.0、支小助将在完成备案后上线

9月8日&#xff0c;在上海举办的外滩大会上&#xff0c;蚂蚁集团正式发布金融大模型。据了解&#xff0c;蚂蚁金融大模型基于蚂蚁自研基础大模型&#xff0c;针对金融产业深度定制&#xff0c;底层算力集群达到万卡规模。该大模型聚焦真实的金融场景需求&#xff0c;在“认知、…

浅谈UI自动化测试

最近一直在学习python&#xff0c;正好部门技术结构调整&#xff0c;就开始了点工向UI自动化测试的转变&#xff0c;我要说瞌睡来了就掉枕头么&#xff1f; 不过还好&#xff0c;可以将python的学习成果在自动化测试中实践。。。 1、about自动化测试 定义&#xff1a;把人为驱…

1-3 AUTOSAR软件架构

目录 一、简介 二、基础软件层 BSW 2.1 微控制器抽象层 2.2 ECU抽象层 2.3 复杂的驱动程序 2.4 服务层 三、运行时环境 RTE 四、应用软件层 SWC 一、简介 分层架构是实现软硬件分离的关键&#xff0c;它使汽车嵌入式系统控制软件开发者摆脱了以往 ECU 软件开发与验证时…