go原生/扩展库
提倡的原则
不要通过共享内存进行通信;相反,通过通信来共享内存。
[如何贯彻这个原则的demo1.3.5](#有锁的地方就去用channel优化)
Goroutine
(一)goroutine并发模型
-
调度器主要结构
主要调度器结构是M、P、G:
-
M,内核级别线程,goroutine基于M之上,代表执行者,底层线程,物理线程。
-
P,处理器,用来执行goroutine,因此维护了一个goroutine队列,里面存储了所有要执行的goroutine,将等待执行的G与M对接,它的数目也代表了真正的并发度( 即有多少个goroutine可以同时进行)。
-
G,goroutine实现的核心结构,相当于轻量级线程,里面包含了goroutine需要的栈,程序计数器,以及所在M的信息。
P的数量由环境变量中的GOMAXPROCS决定,通常来说和核心数对应。
-
映射关系
用户空间线程和内核空间线程映射关系有如下三种:
- N:1
- 1:1
- M:N
- 调度图
关系如图,灰色的G则是暂时还未运行的&#x