美文网首页
chan通道无阻塞读写

chan通道无阻塞读写

作者: 柯蓝_e007 | 来源:发表于2019-05-07 09:49 被阅读0次

通过time超时机制实现


func ReadWithTimeout(ch chan []byte, timeoutMs time.Duration) (ret []byte, err error) {

    timeout := time.NewTimer(time.Millisecond * timeoutMs)

    select {
    case ret = <- ch:
        return ret, nil
    case <- timeout.C:
        return nil, errors.New("timeout")
    default:
        return nil, errors.New("unkonw")
    }

}

func WriteWithTimeout(ch chan []byte, data []byte, timeoutMs time.Duration) error {

    timeout := time.NewTimer(time.Millisecond * timeoutMs)

    select {
    case ch <- data:
        return nil
    case <-timeout.C:
        return errors.New("timeout")
    default:
        return errors.New("unkonw")
    }
}

使用如下:

readChannel= make(chan []byte, 4096);//创建一个带4k缓存的字节数据通道
data ,err := ReadWithTimeout(readChannel,50)

writeChannel= make(chan []byte, 4096);
WriteWithTimeout(writeChannel,data ,50)

相关文章

  • chan通道无阻塞读写

    通过time超时机制实现 使用如下:

  • Go channel-2

    缓冲通道 非缓冲通道: make(chan T)一次发送,一次接受,都是阻塞式的 缓冲通道:make(chan T...

  • channel详解

    无缓冲通道 只有当读写都准备好时才不会被阻塞 输出: 有缓冲通道 当有缓冲通道长度未满时,写入是无阻塞的 输出: ...

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

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

  • Golang并发:无阻塞通道读写

    阻塞场景无论是有缓存通道、无缓冲通道都存在阻塞的情况。无缓冲通道的特点是,发送的数据需要被读取后,发送才会完成,它...

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

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

  • golang goroutine和channel

    无buffer的chan,buffer=0的chan 从ch中取数据。如果ch中没有传入数据,程序将一直阻塞在<-...

  • for range 和channl

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

  • Golang通道的无阻塞读写

    无论是无缓冲通道,还是有缓冲通道,都存在阻塞的情况,但其实有些情况,我们并不想读数据或者写数据阻塞在那里,有1个唯...

  • chan

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

网友评论

      本文标题:chan通道无阻塞读写

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