Go 里面的 channel 最长可以阻塞多少数据呢?
資深大佬 : sunshinev 3
比如
ch := make(chan int32,1)
ch <- 1 ch <- 2 // 这条记录就开始阻塞了,
// 如果继续 ch <- 3
ch <- 4
那么最长可以保持多长的数据队列呢?
大佬有話說 (3)
比如
ch := make(chan int32,1)
ch <- 1 ch <- 2 // 这条记录就开始阻塞了,
// 如果继续 ch <- 3
ch <- 4
那么最长可以保持多长的数据队列呢?
– 元素大小不能大于 1<<16
– size 不能超过 uint() 能接受的上限(我这里好像 uint 的跨度和 int 的跨度是一样的,都是 64 位)
– 元素大小*chan 尺寸要能经过 runtime/internal/math 中 MulUintptr 的检查(这段逻辑有点难读,我英文一般)
还是看代码吧:
https://gist.github.com/Zhang-Siyang/364b512192275fa9d04978353b5d4443