比如
ch := make(chan int32,1)
ch <- 1 ch <- 2 // 这条记录就开始阻塞了,
// 如果继续 ch <- 3
ch <- 4
那么最长可以保持多长的数据队列呢?
1
BoarBoar 2020-11-20 12:30:07 +08:00
蹲一个回答,盲猜应该是爆内存为止
|
2
loading 2020-11-20 12:34:51 +08:00 via Android
写一段测试一下就好了,二分法学过吧,你用二次幂不就行了。
|
3
CEBBCAT 2020-11-20 17:46:45 +08:00
读过源码之后我简单总结一下( go1.14.4 darwin x86_64 ):
- 元素大小不能大于 1<<16 - size 不能超过 uint() 能接受的上限(我这里好像 uint 的跨度和 int 的跨度是一样的,都是 64 位) - 元素大小*chan 尺寸要能经过 runtime/internal/math 中 MulUintptr 的检查(这段逻辑有点难读,我英文一般) 还是看代码吧: https://gist.github.com/Zhang-Siyang/364b512192275fa9d04978353b5d4443 出自: https://github.com/golang/go/blob/go1.14.4/src/runtime/chan.go#L71-L111 |
4
CEBBCAT 2020-11-27 10:36:23 +08:00
楼主怎么不回帖啊,你这样子以后还有谁愿意解答你的问题
|