Go 高级
- 并发概述:进程、线程、协程
Go 有自己的协程调度器

- Goroutine
见个人笔记
- channel
channel 底层维护一个队列存储数据、有锁控制并发访问,保证协程安全
有无缓冲 channel
- 无缓冲 channel(同步模式),若没有消费者读,就无法写入(阻塞)
- 有缓冲 channel(异步模式),只要没满就可以写入,只要有数据就可以读。极端情况下若满了,发送还是会阻塞(相当于同步了)
向 channel 中写入数据但不关闭,读取方 for range 时会继续循环等待接收数据
[TODO] 利用 “缓冲 channel 满了继续写会阻塞”,可以实现 Goroutine 锁
- Sync
不像传统其他语言,采用共享内存来通信,通过锁来保证并发安全。Go 倡导通过通信来共享内存,采用 sync 包对并发安全机制的支持。
- select 多路复用。通过起一个 goroutine 来监听各个管道的读写事件,相当于单线程处理多个 IO
- context 作用:控制协程优雅退出、传递上下文信息。
- 定时器
- 协程池
- 反射