并发模型的底层实现
CSP(通信顺序进程)模型的核心思想CSP模型的核心思想是 “不要通过共享内存来通信,而是通过通信来共享内存” 。这一思想颠覆了传统并发编程中依赖锁机制保护共享内存的方式,转而通过消息传递 (Message Passing)实现协程间的安全协作。其实上本质是把数据所有权通过Channel在goroutine间显式传递,而非隐式地共享内存地址空间。 三个模块goroutineGo运行时管理的用户态协程,创建成本仅为2KB栈内存(详细的内容可以去看看前面两个博文),竟然还支持百 ...
2025.06.13
Go Context 控制并发的核心机制
Go 的 context 包是并发编程的核心工具,他的设计通过统一接口简化了 goroutine 的生命周期管理。其实核心就在于 context.Context 接口的四个方法:Deadline()、Done()、Err() 和 Value(key)。但是呢 cancelCtx 和 timerCtx 是其实现的关键结构,分别用于处理主动取消和超时取消。 取消流程cancelCtx 是支持取消操作的核心结构,源码: 1234567type cancelCtx struct &# ...
2025.03.22
Go的连续栈
连续栈这个概念是go 1.3版本引入的,它能通过动态调整栈空间的大小,解决传统固定栈或分段栈的缺陷。 栈在go语言里面的演变栈(Stack)是一种个遵循“后进先出”(当为在木桶里面装馕饼吃)原则的线性数据结构,主要来存储函数调用时的局部变量、参数和返回地址等信息。在传统编程语言中,栈通常被分配为固定大小的内存块,如果我们的程序递归过深或者是说局部变量过多,则可能导致栈溢出 (Stack Overflow)。为解决这一问题,Go语言早期采用分段栈 (Segmented Stac ...
2024.11.13