线程
- 线程是非常有用的构建工具
- 再Go中线程称为goroutines,其他语言中叫做线程
- 他们通常比较棘手
为什么使用线程?
- 允许利用并发,这在分布式系统中很自然的体现出来
- 再I/O并发中,允许在等待一个IO响应时,处理下一个请求
- 多线程可以平行运行在多核上
Thread = “thread of execution”
- 线程允许一个程序在逻辑上一次执行许多事情
- 线程间有共享内存
- 每个线程包含自己的运行状态:
- 程序计数器
- 寄存器
- 栈
一个程序会有多少个线程?
- 尽可能多的“有用的”线程在一个应用中
- Go鼓励创建更多的线程
- 通常线程数会大于CPU核心数
- Go的调度器将他们调度到可用的核心上
- Go的线程也时有损耗的,但他要比通常意义中创建一个系统线程要轻量
使用线程的挑战?
- 共享数据:e.g. 一个线程读数据同时另一个线程改变数据,将导致竞争条件
- 不要共享数据或者协调共享(使用互斥锁等)
- 线程间的协调:(e.g.