当前位置:   article > 正文

Go语言中如何设置channel缓冲区大小

Go语言中如何设置channel缓冲区大小

        当我们使用make内置函数创建channel时,channel可以是非缓冲的,也可以是缓冲的。与这个话题相关,有两个错误经常发生:对该使用哪种channel感到困惑;如果使用缓冲channel,使用缓冲区大小是多少的。让我们检查一下这些要点。首选,要记住核心概念。非缓冲channel是没有任何容量的channel,它可以省略大小或以0大小来创建:

  1. ch1 := make(chan int)
  2. ch2 := make(chan int, 0)

使用非缓冲channel(有时将其称为同步 channel),发送者将阻塞,直到接收者从channel接收到数据。缓冲channel是有容量的,它必须以大于或等于1的大小创建:

ch3 := make(chan int,1)

 使用缓冲channel,发送者可以在channel未满时发送消息。一旦channel已满,它将阻塞,直到接收者goroutine收到消息。例如:

  1. ch3 := make(chan int, 1)
  2. ch3 <-1
  3. ch3 <-2

 第一个发送没有阻塞,而第二个发送会阻塞,因为这个时候channel已经满了。

        下面让我们来讨论这两种channel类型的根本区别。channel是实现goroutine之间通信的并发抽象。但是同步呢?在并发中,同步意味着我们可以保证多个goroutine在某个时刻处于已知状态。例如,互斥锁提供同步,因为它确保在一个时刻只有一个goroutine处于临界区。至于channe

声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号