美文网首页golang
golang 中channel 缓存channel 和无缓存ch

golang 中channel 缓存channel 和无缓存ch

作者: 顶尖少爷 | 来源:发表于2021-04-26 11:15 被阅读0次
c1:=make(chan int)        无缓冲

c2:=make(chan int,1)      有缓冲

无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 <-c1 接手了 这个参数,那么c1<-1才会继续下去,要不然就一直阻塞着

而 c2<-1 则不会阻塞,因为缓冲大小是1 只有当 放第二个值的时候 第一个还没被人拿走,这时候才会阻塞。

有缓冲

    var c=make(chan int,1)
    fmt.Println("Main going to call hello go goroutine")
     go func(c  chan int) {
         fmt.Println("hello go routine is going to sleep")
         time.Sleep(4 * time.Second)
         fmt.Println("hello go routine awake and going to write to done")
         c<-1
     }(c)

    <-c
    fmt.Println("Main received data")

无缓存区

package main

import (  
    "fmt"
)

func producer(chnl chan int) {  
    for i := 0; i < 10; i++ {
        chnl <- i
    }
    close(chnl)
}
func main() {  
    ch := make(chan int)
    go producer(ch)
    for v := range ch {
        fmt.Println("Received ",v)
    }
}

相关文章

  • golang 中channel 缓存channel 和无缓存ch

    无缓冲的 不仅仅是 向 c1 通道放 1 而是 一直要有别的携程 <-c1 接手了 这个参数,那么c1<-1才会继...

  • Go语言学习教程(十六)

    一、死锁 * 在主goroutine中向无缓存channel添加内容或在主goroutine中向channel添加...

  • Golang无限缓存channel

    需求 最近在弄一个游戏的gate网关转发服务器,服务器之间使用的是nats通讯,gate的作用是接收客户端发来的消...

  • 无缓存的channel

    无缓存的通道   是指在接收前没有能力保存任何值的通道  这种类型的通道要求goroutine和接收gorouti...

  • golang 无缓存channel实现原子锁

    用一个缓存空间的channel实现锁比较简单,如果是无缓存就会稍微麻烦点直接上代码了: 以下是sample: 欢迎...

  • Spring AMQP学习笔记

    Spring的CachingConnectionFactory用于缓存Channel。 The purpose o...

  • netty组件与设计

    1. Channel、EventLoop和ChannelFuture Channel、EventLoop 和 Ch...

  • golang作业帮面试

    1.channel实现 go调度原理 select和epoll的区别 redis分布式锁 redis缓存穿透,缓存...

  • 有缓存channel

    有缓冲的通道 是一种在被接收前能够存储一个或多个值的通道  这种类型的通道并不强制要求goroutine之间必须同...

  • Golang Channel底层实现

    Go Channel 底层实现 目录 channel 是什么 channel 的创建 channel 的发送 ch...

网友评论

    本文标题:golang 中channel 缓存channel 和无缓存ch

    本文链接:https://www.haomeiwen.com/subject/zgwsrltx.html