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

go sync.map源码解读

此源码理解仅为个人理解,如有错误欢迎指出

sync.map的数据结构主要包含四个字段
一个互斥锁,readonly,dirty,和miss

从读写两个方面来讲这几个变量
readonly其实就是有bool值的dirty,底层结构都是map

readonly的读更新不会上锁,dirty的读写都是需要上锁的

在读map的时候,会先读readonly,如果不存在就会上锁去读dirty,此时miss++

在写map的时候,也会先判断在readonly中是否存在,如果存在就直接更新,此时其实有个判断
如果read中的变量一开始存在,但是被删除后,他是一个expunged的状态,此时是需要写dirty的,这个状态其实也会被判断在readonly中存在
如果readonly中不存在,就会去判断在dirty是否存在,存在的话直接更新dirty,不然的话就是新建dirty

总的来说就是先找readonly中的数据,有的就直接读写,没有就去找dirty。并且每次从readonly读不到数据但是dirty读到了,就会miss++

一旦miss大于dirty的长度,就会触发dirty到readonly的升级(这块还挺复杂,需要再看看)

因为读read不用上锁,所以当然是到read里更好

sync.map总体来说是在写完一次多读的情况下使用比较好,以及不同协程对不同键的读写情况下使用比较好

相关文章:

  • UDP网络套接字编程
  • JS——日期字符串yyyymmdd转yyyy-mm-dd的两种方法
  • TS是什么、为什么、怎么办
  • git代码提交命令(如何提交代码)
  • 装饰器设计模式是什么?什么是 Decorator 装饰器设计模式?Python 装饰器设计模式示例代码
  • Spark---基于Standalone模式提交任务
  • 三十分钟学会Shell(上)
  • 51单片机的智能浇花系统【含proteus仿真+程序+报告+原理图】
  • vue3的 nextTick()的使用
  • leetcode 240. 搜索二维矩阵 II
  • [Android]使用Retrofit进行网络请求
  • 含分布式电源的配电网可靠性评估(matlab代码)
  • vue2.0+elementui集成file-loader之后图标失效问题
  • 安徽省广德市选择云轴科技ZStack Cloud云平台建设县级智慧城市
  • SQL注入漏洞发现和利用,以及SQL注入的防护
  • 《Java8实战》-第四章读书笔记(引入流Stream)
  • 03Go 类型总结
  • Django 博客开发教程 8 - 博客文章详情页
  • JAVA并发编程--1.基础概念
  • js 实现textarea输入字数提示
  • nginx(二):进阶配置介绍--rewrite用法,压缩,https虚拟主机等
  • Service Worker
  • storm drpc实例
  • Sublime text 3 3103 注册码
  • vue+element后台管理系统,从后端获取路由表,并正常渲染
  • 代理模式
  • 搞机器学习要哪些技能
  • 函数式编程与面向对象编程[4]:Scala的类型关联Type Alias
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 前端临床手札——文件上传
  • 前嗅ForeSpider教程:创建模板
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 再谈express与koa的对比
  • 在weex里面使用chart图表
  • 责任链模式的两种实现
  • 字符串匹配基础上
  • Nginx惊现漏洞 百万网站面临“拖库”风险
  • 曜石科技宣布获得千万级天使轮投资,全方面布局电竞产业链 ...
  • ​​​​​​​Installing ROS on the Raspberry Pi
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • # 日期待t_最值得等的SUV奥迪Q9:空间比MPV还大,或搭4.0T,香
  • #include到底该写在哪
  • (10)STL算法之搜索(二) 二分查找
  • (2021|NIPS,扩散,无条件分数估计,条件分数估计)无分类器引导扩散
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (转)我也是一只IT小小鸟
  • .Net - 类的介绍
  • .Net MVC4 上传大文件,并保存表单
  • .NET/C# 项目如何优雅地设置条件编译符号?
  • .NET微信公众号开发-2.0创建自定义菜单
  • ??在JSP中,java和JavaScript如何交互?
  • [20161101]rman备份与数据文件变化7.txt