golang中channal容量的问题

golang中定义channal是make(chan int,i)
后面的数字i就是channal的容量, 这里重点说一下容量为0(默认)和容量为1的区别:
可以把channal想象成一个水管
容量为0时, 这个水管必须先接好出口,即<-chan, 然后才能往水管里注水, 即chan<-
而容量为1时, 水管有了一个蓄水池, 就可以在没接出口时, 先往水管里放1个单位的水,也就是说可以先chan<-, 再<-chan

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Golang的map超过其容量限制时,会发生什么情况?首先,需要理解Golangmap的工作原理。Golang的map是一种无序键值对的集合,可以通过键来访问对应的值。map的容量是指用于存储键值对的内存空间大小。 当map的键值对数量超过了其容量限制时,Golang会自动进行扩容操作。扩容会创建一个更大的内存空间用于存储键值对,然后将原有的键值对重新散列到新的内存空间。这个过程会导致一定的性能开销,因为所有的键值对需要重新计算散列值并存储到新的内存空间。 在扩容过程Golang会根据当前map的负载因子来决定扩容的大小。负载因子是指已经存储的键值对数量与容量之比,当负载因子超过阈值时,就会触发扩容操作。在扩容过程Golang会选择一个合适的新容量,并重新计算散列函数和散列桶的数量。 需要注意的是,如果map存在大量的键值对,在扩容时可能会占用较多的内存空间,并可能导致更长的扩容时间。因此,在设计使用map时,应根据业务需求和系统资源情况,合理设置map的初始容量,以尽量避免扩容操作带来的性能损耗。 综上所述,当Golang的map超过容量时,会自动进行扩容操作。扩容会创建一个更大的内存空间,并将原有的键值对重新散列到新的内存空间。扩容过程可能会带来一定的性能开销,因此在设计使用map时需要合理设置初始容量来减少扩容的次数和影响。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值