Golang
文章平均质量分 89
simanstar
后台开发
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Golang各版本特性
1.2.原创 2025-07-23 15:31:25 · 322 阅读 · 0 评论 -
Golang WaitGroup 原理深度剖析
Waitgroup 虽然只有 100 行左右的代码。作为语言的内置库,我们从中可以看出作者对每个细节的极致打磨,非常精细的针对场景优化性能,这也给我们写程序带来了很多启发。原创 2025-04-18 01:00:47 · 821 阅读 · 0 评论 -
深度分析 Golang sync.Pool 底层原理
sync.Pool 是 Golang 内置的对象池技术,可用于缓存临时对象,以缓解因频繁建立临时对象带来的性能损耗以及对 GC 带来的压力。在许多知名的开源库中都可以看到 sync.Pool 的大量使用。例如,HTTP 框架 Gin 用 sync.Pool 来复用每个请求都会创建的对象。在 grpc-Go、kubernetes 等也都可以看到对 sync.Pool 的身影。但需要注意的是,sync.Pool 缓存的对象随时可能被,因此不能将 sync.Pool 用于存储持久对象的场景。原创 2025-04-17 01:35:23 · 1091 阅读 · 0 评论 -
Golang三色标记混合写屏障GC模式全分析
以上便是Golang的GC全部的标记-清除逻辑及场景演示全过程。GoV1.3- 普通标记清除法,整体过程需要启动STW,效率极低。GoV1.5- 三色标记法, 堆空间启动写屏障,栈空间不启动,全部扫描之后,需要重新扫描一次栈(需要STW),效率普通GoV1.8-三色标记法,混合写屏障机制, 栈空间不启动,堆空间启动。整个过程几乎不需要STW,效率较高。5、Golang三色标记混合写屏障GC模式全分析 · 语雀。原创 2025-04-16 00:56:53 · 1157 阅读 · 0 评论 -
Golang的协程调度器原理及GMP设计思想
本节为重点章节本章节含视频版:视频链接地址:Golang深入理解GPM模型_哔哩哔哩_bilibili我们知道,一切的软件都是跑在操作系统上,真正用来干活(计算)的是CPU。早期的操作系统每个程序就是一个进程,直到一个程序运行完,才能进行下一个进程,就是“单进程时代”一切的程序只能串行发生。早期的单进程操作系统,面临2个问题:1.单一的执行流程,计算机只能一个任务一个任务处理。2.进程阻塞所带来的CPU时间浪费。那么能不能有多个进程来宏观一起来执行多个任务呢?后来操作系统就具有了最早的并发能力:多进程并发原创 2025-04-14 01:35:29 · 527 阅读 · 0 评论 -
一站式Golang内存管理洗髓经
Golang的内存管理及设计也是开发者需要了解的领域之一,要理解 Go 语言的内存管理,就必须先理解操作系统以及机器硬件是如何管理内存的。因为 Go 语言的内部机制是建立在这个基础之上的,它的设计,本质上就是尽可能的会发挥操作系统层面的优势,而避开导致低效情况。本章节会围绕以下六个话题逐步展开。(1)何为内存。(2)内存为什么需要管理。(3)操作系统是如何管理内存的。(4)如何用Golang自己实现一个内存管理模型。(5)Golang内存管理之魂:TCMalloc。原创 2025-04-13 00:44:19 · 688 阅读 · 0 评论 -
Golang sync.Mutex源码分析
sync.Mutex是一个不可重入的排他锁。 这点和Java不同,golang里面的排它锁是不可重入的。当一个 goroutine 获得了这个锁的拥有权后, 其它请求锁的 goroutine 就会阻塞在 Lock 方法的调用上,直到锁被释放。数据结构与状态机 sync.Mutex由两个字段 state 和 sema 组成。其中 state 表示当前互斥锁的状态,而 sema 是用于控制锁状态的信号量。type Mutex struct { state int32 sem...原创 2022-01-30 00:07:00 · 912 阅读 · 0 评论 -
sync.map原理分析
一、疑惑开篇#有了map为什么还要搞个sync.map 呢?它们之间有什么区别?答:重要的一点是,map并发不是安全的。在Go 1.6之前, 内置的map类型是部分goroutine安全的,并发的读没有问题,并发的写可能有问题。自go 1.6之后, 并发地读写map会报错,这在一些知名的开源库中都存在这个问题,所以go 1.9之前的解决方案是额外绑定一个锁,封装成一个新的struct或者单独使用锁都可以。go version go1.13.9 windows/amd64测试一波#原创 2022-01-29 23:13:59 · 904 阅读 · 0 评论 -
深度解密Go语言之unsafe
目录指针类型 什么是 unsafe 为什么有 unsafe unsafe 实现原理 unsafe 如何使用 获取 slice 长度 获取 map 长度 map 源码中的应用 Offsetof 获取成员偏移量 string 和 slice 的相互转换 总结 参考资料指针类型在正式介绍 unsafe 包之前,需要着重介绍 Go 语言中的指针类型。我本科开始学编程的时候,第一门语言就是 C。之后又陆续学过 C++,Java,Python,这些语言都挺强大的,但是没了原创 2022-01-28 15:50:37 · 594 阅读 · 0 评论 -
golang中的reflect(反射)
一、概述在golang中,reflect是一个比较高级的话题,本文将尽可能简单而又清楚的介绍相关内容。本文将从如下几个方面进行阐述:- 什么是reflection ?- 如何检查一个变量var 并获得其真实类型- golang中的reflect包1.1 reflect.Type 和 reflect.Value1.2 reflect.Kind1.3 NumField() 和 Field()1.4 Int() 和 String()- 完整实例- 如何使用reflection二、什么原创 2022-01-26 16:32:19 · 4678 阅读 · 1 评论 -
深入理解Golang之context
context是Go并发编程中常用到一种编程模式。本文将从为什么需要context,深入了解context的实现原理,以了解如何使用context。前言这篇文章将介绍Golang并发编程中常用到一种编程模式:context。本文将从为什么需要context出发,深入了解context的实现原理,以及了解如何使用context。为什么需要context在并发程序中,由于超时、取消操作或者一些异常情况,往往需要进行抢占操作或者中断后续操作。熟悉channel的朋友应该都见过使用done chan原创 2021-11-14 01:46:58 · 861 阅读 · 0 评论 -
golang的defer机制详解
defer概述 defer用来声明一个延迟函数,把这个函数放入到一个栈上,当外部的包含方法return之前,返回参数到调用方法之前调用,也可以说是运行到最外层方法体时调用。我们经常用他来做一些资源的释放,比如关闭io操作。 defer是golang的一个特色功能,被称为“延迟调用函数”。当外部函数返回后执行defer。类似于其他语言的 try… catch … finally… 中的finally,当然差别还是明显的。在使用defer之前我们应该多了解defer的特性,这样才能避免使用上的...原创 2021-11-13 19:08:21 · 10836 阅读 · 1 评论 -
深入理解Golang Channel
Golang使用Groutine和channels实现了CSP(Communicating Sequential Processes)模型,channles在goroutine的通信和同步中承担着重要的角色。在GopherCon 2017中,Golang专家Kavya深入介绍了 Go Channels 的内部机制,以及运行时调度器和内存管理系统是如何支持Channel的,本文根据Kavya的ppt学习和分析一下go channels的原理,希望能够对以后正确高效使用golang的并发带来一些启发。以..原创 2021-10-25 20:20:34 · 294 阅读 · 0 评论 -
图示Golang垃圾回收机制
垃圾回收概念程序创建对象等引用类型实体时会在虚拟内存中分配给它们一块内存空间,如果该内存空间不再被任何引用变量引用时就成为需要被回收的垃圾。操作系统会记录一个进程运行时的所占用的内存、CPU和寄存器等资源,当进程结束后便由操作系统能够自动回收资源。但是对于一个运行较长时间的程序,如果使用完内存资源后没有及时释放就会造成内存泄漏甚至系统错误。以不支持自动垃圾回收的C++为例:void foo(){ char *p = new char[128]; // 对指针的使用 delet..原创 2021-10-22 01:38:29 · 668 阅读 · 0 评论
分享