Go 的并发模式(中)(更新中)

作者: zidea | 来源:发表于2019-04-03 07:48 被阅读1次
  • 有几种情况都会发生堵塞,一旦发生堵塞就会造成锁死

  • 第一种情况只有发送没有接受,就会造成 blocking

ch := make(chan int)
    ch <- 1
  • 第二种情况没有发送只有接受,就会造成 blocking
ch := make(chan int, 3)
fmt.Println("",<-ch)
  • buffered channel 一旦满了也会造成 blocking 的问题
    ch := make(chan int, 3)
    ch <-1
    ch <-2
    ch <-3
    

    fmt.Println("",<-ch)
    fmt.Println("",<-ch)
    fmt.Println("",<-ch)

  • 可以用 close 来关闭 channel,但这并不是最好解决方案
    ch := make(chan int, 3)
    ch <-1
    ch <-2
    ch <-3
    
    close(ch)
    fmt.Println("",<-ch)
    fmt.Println("",<-ch)
    fmt.Println("",<-ch)
    fmt.Println("",<-ch)
    fmt.Println("",<-ch)

大家发现当关闭channel后重,动态获取值为 0

 1
 2
 3
 0
 0

当调用 close 来关闭通道后,我们再从 channel 获取数据时候返回两个值
0 为 int类型默认值, false 表示该 channel 已经关闭。

val, ok := <-ch
   fmt.Println("",ok)
   fmt.Println("",val)

    false
 0

相关文章

  • Go 的并发模式(中)(更新中)

    有几种情况都会发生堵塞,一旦发生堵塞就会造成锁死 第一种情况只有发送没有接受,就会造成 blocking 第二种情...

  • Go 的并发模式(上)(更新中)

    并发是一种设计 将您的程序设计为独立进程的集合 将这些进程设计为并行运行 通过设计让您的代码无论是同步还是异步结果...

  • Go并发编程(中)

    协程 呐~今天来讲一下协程这个概念,协程相比传统的系统级的线程和进程相比,其最大的优势就在于其“轻量级”,可以轻松...

  • 《Go in Action》第6章Concurrency

    这篇是第6章,并发。 go中的concurrency是什么? A: Concurrency in Go is th...

  • Go语言高并发Map解决方案

    Go语言高并发Map解决方案 Go语言基础库中的map不是并发安全的,不过基于读写锁可以实现线程安全;不过在Go1...

  • Golang 常见的并发模式

    常见的并发模式 Go语言最吸引人的地方是它内建的并发支持。Go语言并发体系的理论是C.A.R Hoare在1978...

  • Go 并发模式

    1. 共享内存 2. 互斥锁 3. 无缓冲channel 4. 带缓冲channel 5. sync.WaitGroup

  • Go语言学习五:异步、同步、锁

    一 、异步、同步控制 在Go中并行与并发是有区别的,详细请参考Go 并发 、并行、线程池, 通过信道的方式来实现同...

  • 【Golang】并发的异常处理

    go语言的并发实现起来很简单,只需要一个go关键字即可使函数并发,但是捕捉并发方法中的错误就没有那么方便了。本文总...

  • go常见并发模式(1):基本模式

    最基本模式:go+sync如下使用go+sync.WaitGroup并发执行让0-9每位数字加一 最基本模式:go...

网友评论

    本文标题:Go 的并发模式(中)(更新中)

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