-
Notifications
You must be signed in to change notification settings - Fork 147
Open
Description
散列逻辑只会将任务平均分配到固定的几个worker中去执行,很多worker都是闲置的
写了一个demo,大概意思是将10000个任务分配到50个worker当中
m := make(map[uint32]uint32, 0)
for i := 0; i < 10000; i++ {
var a = uint64(i)
aa := &a
b := (*[4]byte)(unsafe.Pointer(aa))
// fmt.Println(*b)
h := fnv.New32a()
h.Write((*b)[:])
code := h.Sum32()
// fmt.Println(code)
workID := code & uint32(50)
// fmt.Println(workID)
m[workID]++
}
for k, v := range m {
fmt.Printf("k=%v,v=%v\n", k, v)
}
实际效果是50个worker只用到了其中的8个,其他42个都是闲置的
k=48,v=1251
k=18,v=1250
k=16,v=1249
k=0,v=1249
k=50,v=1250
k=34,v=1250
k=32,v=1251
k=2,v=1250
demo中的代码是根据tao框架的散列逻辑写的,demo很简单不知道有没有漏掉什么,如果没有,那这个worker分配就有问题了。
Metadata
Metadata
Assignees
Labels
No labels