Blog

0 minutes, 33 seconds

Golang 内存分配学习笔记

内存分配的核心问题是什么? 内存分配的设计核心问题是分配速度和内存利用率。但这两部分是互相牵制的。例如如果追求极致的速度,那么只能采用最简单的分配方式,无法按需分配,浪费极多。如果追求极致的内存利用率,选择最佳匹配算法,则需要大量的时间去计算和维护。我觉得了解一个内存分配机制,从这个矛盾来看也许会清晰一点。 TCMalloc : Thread-Caching Malloc的思想 golang对于内存分配的思想来自于TCMalloc,其主要想法是为每一个线程分配一块局部缓存。小内存分配从线程的局部缓存中获取,实现了无锁分配,减少了竞争。 golang也同时继承了TCMalloc三级结...

Golang_select

Error: Invalid Frontmatter Path: /var/www/grav/user/pages/02.blog/05.golang_select/blog.md Failed to read /var/www/grav/user/pages/02.blog/05.golang_select/blog.md: You cannot define a sequence item when in a mapping at line 7 (near "- 学习笔记") --- title: 'golang select 学习笔记' taxonomy: cate...

go channel 学习笔记

CSP CSP 是 Communicating Sequential Processes(通信顺序进程)的简称。其理论是通过共享内存以外的通信方式来协调并发实体。在 golang 中通过 channel 和 goroutine 实现了其中很小一部分。 channel 是什么 channel 是 goroutine 之间用于沟通的管道。 channel 基础用法 channel 的初始化非常简单: ch := make(chan channelType) // 无缓冲管道 ch := make(chan channelType, size) // 有缓冲管道 这里有一...

go 协程调度

最开始加一个goroutine调度的演示,意思一下: https://toolkit.whysonil.dev/tools/simulators/goroutine-scheduler 线程、协程和goroutine 线程 线程是内核(os)调度的基本单元,是内核可见的。 线程拥有自己的堆栈和寄存器。 线程切换需要陷入内核态,因此较其他两种都更重。 协程 协程可以看作用户级线程,是程序负责调度。内核不可见。 往往是协作式的,即协程自己手动让出资源。 切换不需要陷入内核态,轻量一些。 goroutine 是go的协程实现。相比于传统协程,实现的是抢...

《程序员修炼之道》 阅读笔记01

本人在24年7月正式参加工作,到今天(2026年2月4日)积累了大约一年半的工作经验。我在研究生快毕业之前,实习的时候第一次读了这本书,当时有一些囫囵吞枣的成分。当时的我感觉书中很多部分都是非常浅显的道理,而且并没有什么感悟。 转眼一年半过去,正着手准备跳槽的时候,正好看到这本放在书柜上很久的书,打开翻翻感觉这一年半的工作经验完全是这本书的反例。因此决定把重读这本书的感受写下来,勉励今后的自己。(因此这个系列的blog都充满了自说自话和废话) 第一章 务实的哲学 第一次读这本书的时候,翻开第一页,我就被名为“务实”的哲学所打动。“务实”实际上是一种最浅显的哲学思考,我现在觉得也是一...

Previous Next