
sync/Map
文章平均质量分 98
sync/mutex
xjx
不入流的大龄码农一枚
展开
-
Go同步原语之sync/Pool
Pool本质是为了提高临时对象的复用率;Pool使用两层回收策略(localvictim)避免性能波动;Pool本质是一个杂货铺属性,啥都可以放。把什么东西放进去,预期从里面拿出什么类型的东西都需要业务使用方把控,Pool池本身不做限制;Pool池里面cache对象也是分层的,一层层的cache,取用方式从最热的数据到最冷的数据递进;Pool是并发安全的,但是内部是无锁结构,原理是对每个P都分配cache数组(数组),这样cache结构就不会导致并发;永远不要copy一个Pool。原创 2023-09-15 11:06:36 · 509 阅读 · 2 评论 -
Go同步原语之sync/Map
在结构体内容部分介绍过,entry.p是一个nilexpunged、其他正常值。那nilexpunged有啥区别呢?其实nilexpunged都用来表示keynilread map和dirty map在物理上仍保有该key-entry对,因此倘若此时需要对该entry执行写操作,可以直接CAS操作;expungeddirty map中已经没有该key-entry对,倘若执行写操作,必须加锁(dirty map必须含有全量key-entry对数据);设计expunged和nil。原创 2023-09-06 17:22:58 · 260 阅读 · 1 评论 -
Protocol Buffers编码
在对ProtoBuf做了一些基本介绍之后,这篇开始进入正题,深入ProtoBuf的一些原理。我们都知道采取了二进制编码结构传输,但其二进制编码相比普通的二进制编码更加紧凑,旨在高效地序列化和传输结构化数据。这种编码结构与XML或JSON相比更加紧凑,因为它不包含标签名称和其他冗余信息,仅关注数据的有效表示。在将其数据转化为其二进制编码的过程中采取了多种编码方式协同,主要采用了TLVVarintFixed32Fixed64和等编码方式。原创 2023-08-23 17:23:27 · 182 阅读 · 0 评论 -
Protocol Buffers基础
在中,service用于定义RPC)服务。RPC服务定义了一组可以通过网络进行调用的方法,这允许不同的应用程序在不同的计算机上进行通信。以下是service在protobuf// 可以定义更多的 rpc 方法...在上述语法中,是你定义的服务名称,MethodName是你定义的RPC方法名称,是该方法接收的请求消息类型,是该方法返回的响应消息类型。以下是一个示例,展示了如何在proto文件中定义一个简单的RPC在上述示例中,我们定义了一个名为的服务,其中包含一个名为Add的RPC方法。原创 2023-08-15 17:34:15 · 180 阅读 · 1 评论