并发
并发--协程
- 启动携程
- 代码示例
- 代码示例
- 多核CPU设置
- 代码示例
- 代码示例
并发--协程通信
- channel
- 代码示例
- 代码示例
- select
- 代码示例
- 代码示例
并发--协程同步
- 系统工具 sync.waitgroup
- Add(delta int) 添加协程记录
- Done() 移除协程记录
- Wait() 同步等待所有记录的协程全部结束
- 代码示例
并发--总结
- 如何启动携程
go
- CPU的常规设置
- go语言默认是所有核心数,但是可以依靠代码去设置核心数,通常是最大核心数-1
- 携程间的通信及常规操作
- 使用
channel
通信,接收数据可以使用select随机接收多个管道的数据
- 使用
- 如何控制协程间的同步
- sync.WaitGroup
QA
进程
- 进程是一种系统运行的行动
- 进程的定位是程序的执行实体
线程
- 线程是运算调度的最小单元
- 线程的作用是同时运算多个任务
协程
- 协程是轻量级的线程
- 协程是用户态的线程
- 协程的优势
- 协程的内存消耗更小
- 一个线程可以包含多个协程
- 线程大约8MB的内存申请量
- 协程大概2KB的内存申请量
- 上下文切换更快
- 协程少一道手续
- 线程申请内存,需要走过内核
- 协程申请内存,不需要走过内核
- 协程的内存消耗更小
Goroutine的优势
- 去掉了冗余的协程生命周期管理
- 协程创建
- 协程完成
- 协程重用
- 降低额外的延迟和开销
- 由于协程之间频繁交互导致的
- 降低加锁/解锁的频率
- 降低一部分额外的开销