1. 并发机制是在runtime库中实现的
2. go程序理论上可以运行10000个协程
3. M P G模型中
3.1 M值的两种设置方法
- 初始化的时候可以设置
- 之后可以通过runtime/debug设置
3.2 P值的两种设置方法
- 通过runtime.GOMAXPROCS设置
- 通过环境变量GOMAXPROCS设置
p值有一个硬性上限 256
注意:通过runtime.GOMAXPROCS设置的时候会停止所有p和G,影响程序的性能,所以设置P值的时候一般是在main函数之前P有状态
见go并发实践136页
P有两个队列,一个是可运行队列,用来存放即将运行的程序,另一个是自由队列,用来重用G,就不需要创建新的Ggo语句的执行顺序
步骤1:go 语句
步骤2:生成newporc
步骤3:本地p和调度器看看有没有可用的自由G,没有新建一个
步骤4:初始化关联go函数,G的状态以及ID
步骤5:存到本地P的runnext,然后会把原来runnext上面的G放到p的可运行队列的尾,如果队列满了,则追加到调度器的课运行队列中G也有状态
见go并发实践140页