第九章
协程机制
Thread vs. Groutine
- 创建时默认的 stack 的大小
- JDK5 以后 Java Thread stack 默认为 1M
- Groutine 的 Stack 初始化大小为 2K
- 和 KSE (Kernel Spcace Entity)的对应关系
- Java Thread 是 1:1
- Groutine 是 M:N
上图是一个多对多的关系的简图,如果 thread 和 kernel entity 是 1:1 的关系,kernel entity 也就是系统线程直接由 CPU 进行调度,这样调度的效率非常的高,但是存在线程之间发生切换的时候,会发生内核对象的切换,这种操作开销很大。如果多个线程和一个系统线程对应,那么他们之间的切换就非常的小了。
M:系统线程
P:Go 语言实现的协程处理器
G:协程
测试示例 1
package groutine
import (
"fmt"
"testing"
"time"
)
func TestGroutine(t *testing.T) {
for i:=0;i<10;i++{
go func(i int) {
fmt.Println(i)
}(i)
}
time.Sleep(time.Millisecond * 50)
}