首页 > 其他分享 >golang中线程安全的map

golang中线程安全的map

时间:2024-12-24 19:43:07浏览次数:3  
标签:扩容 map sync golang key 中线 溢出

golang中线程安全的两种数据结构:

channel

sync.Map

保证线程安全可以使用sync包下面的

互斥锁sync.Mutex

读写锁sync.RWMutex

原子操作sync.atomic

map的底层原理

count:key的数量

flags:是否进行写操作

B:桶的数量,它是以2为底的对数,即2的B次方

hash0:哈希因子

buckets:桶的列表,一个bmap数组存储键值对(当一个桶存不下时,会指向一个溢出桶存储,当这个溢出桶存不下时,会指向下一个溢出桶存储)

bmap里面包括tophash(高8位)、keys(键)(哈希运算+取模运算得到位置)、elems(值)、overflow(溢出桶)

map不可寻址

map的扩容

等量扩容:当有大量的key被删除时,为了提高查找效率,过滤掉无用的溢出桶,就会触发等量扩容

双倍扩容:底层是hashmap,当桶的数量大于等于6.5个时,或者,溢出桶的数量过多时,就会触发双倍扩容

map无序性

由于扩容机制,取模运算时桶的数量变化,key的位置不确定

标签:扩容,map,sync,golang,key,中线,溢出
From: https://www.cnblogs.com/kezhang2gopher/p/18624130

相关文章

  • SQLMAP注入之MySQL注入总结
    SQLMAP注入之MySQL注入总结简介sqlmap是一个开源的自动化SQL注入(SQLi)攻击和数据库接管工具,广泛应用于渗透测试、漏洞评估和安全研究。它旨在帮助安全研究人员和渗透测试人员发现和利用SQL注入漏洞,进行数据库接管、信息泄露和数据提取等操作。sqlmap提供了强大的功能,可以......
  • LFImap:本地文件包含发现和利用工具
    免责声明该公众号分享的安全工具和项目均来源于网络,仅供安全研究与学习之用,如用于其他用途,由使用者承担全部法律及连带责任,与工具作者和本公众号无关。简介:LFImap是一个针对本地文件包含发现和利用的工具,该项目处于预alpha阶段。主要版本1.0即将推出,其中包含大量新功能和模块......
  • 模拟 AutoMapper 在单元测试中的应用:_mapperMock.Setup 详解
    模拟AutoMapper在单元测试中的应用:_mapperMock.Setup详解在单元测试中,我们经常需要模拟一些外部依赖的行为,比如数据库操作、网络请求或是映射工具。AutoMapper是.NET中广泛使用的对象映射库,它将一个类型的对象转换为另一个类型的对象。为了在单元测试中有效地验证业务逻辑,......
  • html map area标签,图片热点区域
    <map>和<area>标签在HTML中用于定义图像映射。图像映射是一种在图像上定义多个热点(区域)的技术,每个热点可以是一个矩形、圆或者多边形,并且每个热点都可以链接到不同的URL或者执行不同的操作。下面是关于这两个标签的详细说明和示例:<map>标签<map>标签用于定义图像映射......
  • 11. 说说Hashtable 与 HashMap 的区别
    出生的版本不一样,Hashtable出生于Java发布的第一版本JDK1.0,HashMap出生于JDK1.2。都实现了Map、Cloneable、Serializable(当前JDK版本1.8)。HashMap继承的是AbstractMap,并且AbstractMap也实现了Map接口。Hashtable继承Dictionary。Hashtable中大部分public......
  • Golang 接入 NSQ 实现消费者和生产者
            在现代分布式系统中,消息队列是不可或缺的组件,它允许系统之间异步传递消息,从而实现解耦和高效的处理。NSQ是一个高性能、分布式的消息队列,它适合于处理高吞吐量的消息传递。接下来,我将将介绍如何在Golang中接入NSQ实现生产者和消费者。什么是NSQ?NSQ是......
  • Linux golang安装
    目录方法一:使用包管理器安装(推荐对于大多数用户)对于基于Debian/Ubuntu的系统:对于基于RedHat/CentOS的系统:方法二:从官方网站下载并手动安装(推荐对于需要特定版本的用户)在Linux上安装Go(Golang)可以通过以下几种方式进行。以下是两种最常用的方法:通过包管理器安装和从官方......
  • Esxi 使用 RDM (Raw Device Mapping) 功能直接将磁盘分配给虚拟机,直通
    如果你只想直通单个硬盘,而不是整个SATA控制器,也可以使用RDM(RawDeviceMapping)功能直接将磁盘分配给虚拟机。或者是你的控制器不支持直通,也可以用这种方法将所有的硬盘直接分配给虚拟机使用。 1、创建一个专门用来存储RDM映射文件的目录mkdir/vmfs/volumes/datast......
  • SLD 中 ColorMap的 type属性
    SLD中ColorMap的type属性在ColorMap中,type属性定义了渲染方式,有以下几种类型:1.ramp含义:使用颜色渐变表示数据值的范围。特性:渐变效果是连续的,数据值之间的颜色平滑过渡。适用于连续数据(如温度、海冰浓度等)。示例:<ColorMaptype="ramp"><ColorMapEnt......
  • 由 Mybatis 源码畅谈软件设计(二):MappedStatement 和 SqlSource
    作者:京东保险王奕龙本节我们来介绍org.apache.ibatis.mapping.MappedStatement(映射SQL语句声明的类),它是MyBatis框架中的一个核心类,也是向后不断学习Mybatis源码的基础。在这部分源码中,最值得关注的设计原则是“信息隐藏”,它是在《软件设计哲学》中提到的一个观点,简单来说就......