work steal如何实现随机偷取一个P的goroutine
来源:1-4 Go 程序是怎么跑起来的
softtr
2021-06-10 16:35:05
我找了一下源码,感觉应该是这里,但是看了很多遍没能理解这段注释的意思
1回答
这个是个数学性质,假设元素总共有 Y 个,
我们选择一个数字和 Y 互质,比如 X,
然后选一个起始位置:i
然后用下面这样的代码:
for j := i;;j+= X { pos := j % Y }
可以把 Y 个元素全部遍历一遍,
且不重复
比如你有 4 个元素,我选 X = 3,3 和 4 互质,选起始位置 0
那么我的遍历位置分别为:
(0+3)%4 = 3
(3+3) % 4 = 2
(6+3) %4 = 1
(9+3) %4 = 0
这样看起来是个伪随机序列,能把 4 个元素都遍历完
你可以自己实验一下~其它的 x 和 y~
相似问题
回答 1
回答 1