Golang sync.Cond

在并发编程中,协调多个协程之间的操作是一项常见的需求。条件变量(Condition Variable)是用于解决多个协程之间复杂协调问题的一种机制。条件变量配合互斥锁(`Mutex`)使用,可以让一组协程等待某个条件成立后再继续进行,而不会一直消耗 CPU 资源进行忙等待。本文将详细介绍 Golang 中 `sync` 包提供的 `Cond` 类型,并通过示例代码展示如何使用 `Cond`
阅读全文

Go内存逃逸分析

基本概念逃逸分析(Escape analysis)是由编译器决定内存分配位置的一种技术,不需要程序员明确指定。函数中申请一个新对象时,编译器决定该对象是分配在栈中还是堆中: 如果分配在栈中,函数执行结束后内存会自动回收。 如果分配在堆中,函数执行结束后内存会交给GC(垃圾回收)处理。有了逃逸分析,返回函数局部变量变得可能,这与闭包息息相关。了解哪些场景下对象会逃逸至关
阅读全文

Go垃圾回收机制

前言垃圾即为不再需要的内存块。如果这些垃圾不清理,无法再次被分配使用。在不支持垃圾回收(GC)的编程语言中,这些垃圾内存就会泄露。Golang的垃圾回收也是内存管理的一部分。了解垃圾回收,最好先了解内存分配原理。 垃圾回收算法业界常见的垃圾回收算法有以下几种: 引用计数维护每个对象的引用计数,当引用该对象的对象被销毁时,引用计数减1。当引用计数为0时,回收
阅读全文

URL输入到页面加载的全过程分析

URL输入到页面加载的全过程分析当用户在浏览器中输入一个URL并按下回车键后,背后发生了一系列复杂的过程,最终呈现出用户想要的网页。总体来说,这一过程可以分为以下几个主要步骤:1. DNS解析2. TCP连接3. 发送HTTP请求4. 服务器处理请求并返回HTTP响应5. 浏览器解析渲染页面6. 连接结束 1. DNS解析DNS解析是将
阅读全文

Go语言之Context详解

1. 基本概念 1.1 什么是 Context上下文 `context.Context` 在 Go 语言中用来设置截止日期、同步信号,传递请求相关值的结构体。上下文与 Goroutine 有比较密切的关系,是 Go 语言中独特的设计,在其他编程语言中我们很少见到类似的概念。主要用于超时控制和多Goroutine间的数据传递。注:这里的数据传递主要指全局数据,如 链
阅读全文

WaitGroup底层原理

WaitGroup核心组件`WaitGroup` 结构体内部主要包含以下两个核心部分(在较新的 Go 版本中,实现有所优化,但基本思想一致):1. `counter` (计数器):这是一个整数,用来记录需要等待的 goroutine 的数量。 当我们调用 `Add(n)` 方法时,这个计数器会增加 `n`。 当我们调用 `Done()`
阅读全文

MySQL数据库事务和ACID特性

MySQL数据库事务和ACID特性 1. 概述本文将深入探讨数据库事务和ACID(原子性、一致性、隔离性、持久性)特性,并详细解释MySQL是如何实现这些特性的。结论: 一致性(Consistency)是最终目标; 原子性(Atomicity)、隔离性(Isolation)、持久性(Durability)是实现一致性的手段。MySQL通过以下方式实现ACI
阅读全文

Go语言之防缓存击穿利器 Singleflight

Go语言之防缓存击穿利器 Singleflight 1. 缓存击穿在日常开发中,为了提升性能和减轻数据库的压力,通常会对热点数据进行缓存。例如,使用 Redis 缓存用户请求的数据,如果缓存中有数据则直接返回,否则查询数据库并将结果写入缓存。但是,如果缓存失效了,在查询数据库和将数据再次写入缓存的过程中,其他请求也会出现缓存未命中的情况,导致大量请求直接打到数据库,给数据
阅读全文

Golang sync.Mutex源码解析

Golang sync.Mutex源码解析Go 语言在 `sync` 包中提供了用于同步的一些基本原语,`sync.Mutex` 就是其中最常用的一个。 1. 基本结构Go 语言的 `sync.Mutex` 由两个字段 `state` 和 `sema` 组成。其中 `state` 表示当前互斥锁的状态,而 `sema` 是用于控制锁状态的信号量。```go//
阅读全文

Golang Channel源码解析

Golang Channel源码解析 1. 概述Golang官方对 `chan` 的描述如下: A channel provides a mechanism for concurrently executing functions to communicate by sending and receiving values of a specified element t
阅读全文