tech
Go High-Performance Programming EP10: Two Useful Golang Lock-Free Programming Tips
Go High-Performance Programming EP10: Two Useful Golang Lock-Free Programming Tips. In lock-free programming, the absence of locks is more superficial. Pro。
tech
Go High-Performance Programming EP10: Two Useful Golang Lock-Free Programming Tips. In lock-free programming, the absence of locks is more superficial. Pro。
tech
对于无锁编程来讲,无锁只是一个表象,编程者设法组织 data+processing,重点在于如何消除 dataracing。而消除 dataracing 而言,传统的并发编程逻辑是采用关键区、排他性锁、读写锁等方式来保护 data 不会因为 processing 而导致错误读或错误写,那么对于无锁编程来说,则是通过消除 data 的共享性,或者消除并发操作 data 等方式来解决问题。 所以最典型的无锁编程技法包含两个技巧: 1. structure 2. bumper loop 其他的方法都是相似思路的具体衍生。 这里的“其他的方法”,是指完全不使用锁定或 CAS 的算法设计方案。本文中讨论的是如何设计数据结构及其处理器(算法)来防止加锁,甚至于连 CAS 也去除。 至于在共享的data上强行消除竞争读写问题的其他无锁方案,例如RingBuffer之类的工具类库,则是完全依赖于具体的 data 实体并在具体的 CPU 上进行设计,基本上是一种很受限的方法,
tech
SwissTable 会成为 Golang std map嘛?. 2022年,字节跳动给 Golang 提了 issue 建议把map的底层实现改成SwissTable的。2023年,dolt写了一篇博客 SwissMap: A smaller, faster Golang Hash Table 分享他们 设。
tech
Avoid memory leaks in Go by closing files and HTTP responses, managing goroutines properly, and using `defer` wisely. #GoLang #MemoryManagement
tech
常见限速算法的分析与实现. 在软件架构中,限流是一种控制资源使用和保护系统安全的重要机制。它通过限制在一定时间内可以处理的请求数量,来防止系统过载,确保系统在高负载情况下仍能保持稳定运行。 本文的目标是分析和实现几种常见的限流算法,以及分析他们优缺点。最后我们探讨一下真实业务代码中的一些限流设计。 This。
tech
Common Rate Limiting Algorithms: Analysis and Implementation. Rate limiting is a critical mechanism in software architecture that controls resource usage a。
tech
Go Proposal: A New Json Lib Ep1. Background JSON is a lightweight data interchange format that has been favored by developers for its flexible features sin。
tech
Go 提案: JSON v2 来了. 背景 JSON 是一种轻量级的数据交换格式,Go 语言的 encoding/json 包自诞生以来已有十年之久,它凭借其灵活的特性赢得了开发者的青睐。开发者可以通过结构体标签自定义字段的 JSON 表现形式,也可以让 Go 类型自定义其在 JSON 中的表现形式。然而,随。
tech
Recently, I discovered that the Go standard library includes a built-in implementation of varint, found in encoding/binary/varint.go. This implementation is similar to the varint used in protobuf. Using the Golang standard library's varint source code, we will systematically learn and review the concept of
tech
最近发现 Golang 标准库竟然自带了 varint 的实现,代码位置在 encoding/binary/varint.go,这个跟protobuf里面的varint实现基本是一致的。刚好借助 golang 标准库的 varint 源码,我们来系统地学习和梳理下 varint。 熟悉 protobuf 的人肯定对 varint 不陌生,protobuf 里面除了带 fix (如 fixed32、fixed64) 之外的整数类型, 都是 varint 编码。 varint 的出现主要是为了解决两个问题: 1. 空间效率:以 uint64 类型为例,可以表示的最大值为 18446744073709551615。然而在实际业务场景中,我们通常处理的整数值远小于 uint64 的最大值。假设在我们的业务中,需要处理的整数值仅为 1,但在网络传输过程中,
tech
Decrypt Go: `runtime.SetFinalizer`. If we want to do some resource release before an object is GC, we can use returns.SetFinalizer . It’s like executing de。
tech
本文介绍了Go语言中的runtime.SetFinalizer函数,探讨了如何在对象被垃圾回收之前执行清理操作。通过示例代码,展示了SetFinalizer的用法及其潜在问题,如内存泄漏和对象生命周期延长。文章还提到在实际应用中,SetFinalizer的使用较少,但在Go源码中有广泛应用,提供了对资源管理的深刻见解。