几句话的go scheduler
concurrency好,scheduler就得好。
Rob Pike的'Concurrency Is Not Parallelism'
scheduler的成本主要是:
a) communication
b) migration
scheduler方式主要有2种:
work-sharing: 自己忙就往其他process上扔
work-stealing: 自己空闲就从其他process上偷几个来干
go用的是work-stealing,借鉴于CILK设计论文,tokudb在最早的时候也用了CILK。
粗讲很简单:
就是每个P(process structure)上有个 runnable goroutines list, goroutine结束一个就从这个list摘除一个,如果list空了,那就去“偷”活干,communication和migration都比较低。
refers:
Scalable Go Scheduler Design Doc
runtime/proc.c
Rob Pike的'Concurrency Is Not Parallelism'
scheduler的成本主要是:
a) communication
b) migration
scheduler方式主要有2种:
work-sharing: 自己忙就往其他process上扔
work-stealing: 自己空闲就从其他process上偷几个来干
go用的是work-stealing,借鉴于CILK设计论文,tokudb在最早的时候也用了CILK。
粗讲很简单:
就是每个P(process structure)上有个 runnable goroutines list, goroutine结束一个就从这个list摘除一个,如果list空了,那就去“偷”活干,communication和migration都比较低。
refers:
Scalable Go Scheduler Design Doc
runtime/proc.c