Go语言简介
====
Go于2007年在谷歌创建,旨在提高多核网络机器和大型代码库时代的编程生产力,到今天go的发展已经远远超过了其创始人最开始的期望,在许多知名公司中得到了实践。和其他语言最大的不同就是它的并发处理模型,协程(goroutine),一种用户态的轻量级线程。
协程和线程的区别
====
| | 线程 | Goroutine |
|:----------|:----------|:----------|
| 初始堆栈 | 2M | 2KB,最大为1G |
| 上下文切换成本 | 高 | 低 |
| 调度方式 | 内核控制 | 用户控制 |
GMP模型
====
G:goroutine 协程
M: machine 内核线程
P: processor 处理器,实际并发度的一种抽象
一个内核线程对应一个g列表就可以了,为什么要抽象出p?
性能(handoff、抽象出processor、工作窃取、网络轮询器、堆栈复制)
公平(全局队列、局部最优)
抢占
```
go func