文章目录
背景
不要通过共享内存来通信,而要通过通信来共享内存
协程
golang 中提供 goroutine(协程)机制,写成和操作系统线程并无一对一关系,协程工作在相同的地址空间,go 中通过 channel 来同步协程,协程不是由操作系统内核来控制,而是完全由程序来控制
channel 中如果ch中的数据无人接收,就无法再给通道传入其他数据,即 channel 只能接收一个数据,再接收就会被阻塞,被等待输出
无缓冲的 channel 通道在接收或者释放数据时候所在协程会被阻塞,有缓冲通道在接收或者释放数据时候所在协程不会被阻塞
竞态与竞态条件
golang 中 2 或多个协程竞争同一资源时候称为竞态,如果这些协程对访问同一资源的顺序敏感,那么就称这些写成存在竞态条件
关于信道和锁机制
在 golang 中信道地位很高,面对并发编程有限考虑使用信道,如果信道没法解决的,那只能依靠 golang 中的锁机制了
实际研发过程
实际业务研发中,errgroup 和 context 用的会比较多,channel 会用的比较少,channel 用到地方再任务分发时候会比较多
基本概念
并行与并发
并行是相对于多核 CPU 来说,并发是程序在调度器的作用下通过切换时间片来运行并发程序。在多核 CPU 下,并