0%

引言

channelGo提供的用于goroutine间通信的数据结构, 是核心数据结构之一. 本文假设读者熟悉channel的使用方式, 将从源码的角度解读其数据结构, 并通过源码解释各个操作下channel内实现流程.

Read more »

参考: Go Concurrency Patterns: Context - The Go Programming Language

本文将简单介绍下context pkg内的关键类型与函数, 随后通过两个用例的方式展示context在并发编程中的使用场景;

缘由

Server端一次请求的发生, 往往需要启动新的goroutine, 例如用来请求数据库或RPC. 这就提出了一些合理的需求: 有时需要对goroutine进行生命周期的控制, 例如超过了预期时间则视为请求失败, 应当销毁相关goroutine; 有时需要传递请求相关的内容, 例如权限信息, Trace-ID等.

基于此Google提出了context包, 在并发场景下实现请求生命周期控制;

Read more »

sync包是Go标准包之一, 其使用场景可以分为三种:

  1. Mutex: 共享锁, 读写锁用于共享资源的互斥使用;
  2. WaitGroup: goroutine同步控制;
  3. Once: 全局唯一初始化代码.

在并发编程过程中, 涉及到前两种使用场景. 本文会简单采用Demo方式介绍Mutex, WaitGroup的使用.

Read more »

Select就是ChannelSwitch. Select具备一系列的Case分支和一个默认default分支, 每一个case对应于一个channel操作(send/receive). select在多case场景下会一直等待, 直到某个case操作完成, 就会执行case内对应的语句.

Read more »