美文网首页
chan的一些注意事项,未关闭的单线程阻塞问题

chan的一些注意事项,未关闭的单线程阻塞问题

作者: 哆啦在这A梦在哪 | 来源:发表于2020-12-21 15:28 被阅读0次

定义

    cn := make(chan int)

关闭

close(cn)

放入值

    cn := make(chan int)
    cn <- 0:

取出值

    cn := make(chan int)
    res:=<-cn 

注意点1,关闭执行两次会异常

    cn := make(chan int)
    close(cn)
    close(cn)//这里异常

注意点2,向已经关闭的chan中发送,会异常,需要使用ok的形式判断

    cn := make(chan int)
    close(cn)
    cn <- 0://这里异常
//////////////////////////////////////////////
    可以用这个方法
    res,ok:=<-cn//如果已经关闭,ok为false

注意点3,向已经关闭的chan中获取值时,获取出的内容除了已经放入的,如果继续获取,将获取到对应类型的0值,可以用ok的形式

    cn := make(chan int,3)
    cn <- 3
    cn <- 4
    cn <- 5
    close(cn)
    t1:=<-cn//3
    t2:=<-cn//4
    t3:=<-cn//5
    t4:=<-cn//0,因为已经取空了,所以反馈对应int的0值,如果是字符串,那就是反馈""

注意,注意,注意,特别要注意的是这个,

    res,ok:=<-cn//如果已经关闭,ok为false,没有关闭,这句话就阻塞状态

这个方法当cn如果没有关闭的时候,而且cn中又没有值的时候,这句话是阻塞的
不能用ok直接处理未关闭的chan,使用单线程场景需要考虑

相关文章

  • chan的一些注意事项,未关闭的单线程阻塞问题

    定义 关闭 放入值 取出值 注意点1,关闭执行两次会异常 注意点2,向已经关闭的chan中发送,会异常,需要使用o...

  • golang面试题:对未初始化的的chan进行读写,会怎么样?为

    问题 对未初始化的的chan进行读写,会怎么样?为什么? 怎么答 读写未初始化的chan都会阻塞。 举例 1.写未...

  • for range 和channl

    for range会一直读取数据直到,chan关闭。无缓冲chan相当于一个开关,不存储数据,同步阻塞类型,如果没...

  • chan

    chan 不带缓存 make(chan 数据类型) 进和出都会阻塞. 读和写同时存在,才会同时退出阻塞。如果只...

  • Node.js 通过进程、线程优化的性能

    1. node.js 单线程的特点 node.js 以异步非阻塞单线程,作为其执行速度的保障。什么是非阻塞单线程?...

  • 多线程渲染

    所有的责任都落在应用程序上. 单线程渲染 单线程渲染的问题: 单线程渲染对API的调用,在驱动层的阻塞是未知的 单...

  • 异步 IO 的好处

    上篇文章中,分析了几种任务处理模型:单线程阻塞 IO、多线程非阻塞 IO 和单线程非阻塞 IO 的性能,并画出了简...

  • go的有缓冲chann和无缓冲chan的区别

    有缓冲chan不容易阻塞无缓冲chan是同步的,就是在一个协程里面塞(取),另外一个操作必须即刻执行否则就会阻塞 ...

  • Node 简单总结

    Node 单线程,远离多线程死锁,状态同步等问题。 利用异步io,让单线程远离阻塞,以更好的充分利用cpu。需要强...

  • 深入浅出node-异步IO

    node在多线程和单线程之间的选择: 利用单线程,原理多线程的死锁、状态同步等问题;利用异步IO,让线程原理阻塞,...

网友评论

      本文标题:chan的一些注意事项,未关闭的单线程阻塞问题

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