zoukankan      html  css  js  c++  java
  • Go学习例子(六)

    26、Channel Synchronization

    我们可以使用通道来同步跨 goroutines 的执行。下面是使用阻塞接收等待 goroutine 完成的示例。在等待多个 goroutine 完成时,您可能更愿意使用WaitGroup

    这是我们将在 goroutine 中运行的函数。该通道将用于通知另一个 goroutine 此函数的工作已完成。done

    发送一个值以通知我们已完成。done <- true

    启动一个工人 goroutine,给它一个通知的通道。done := make(chan bool, 1)

    阻止,直到我们收到来自频道上工作人员的通知。 <-done

     

    $ go run channel-synchronization.go      
    working...done   

    27、Channel Directions

    使用通道作为函数参数时,可以指定通道是仅发送还是接收值。这种特异性增加了程序的类型安全性。

    此函数仅接受用于发送值的通道。尝试在此通道上接收将是一个编译时错误。ping

    该函数接受一个通道用于接收 (),另一个通道用于发送 ()。pongpingspongs

     

    $ go run channel-directions.go
    passed message

    28、Select

    Go的"选择"可让您等待多个通道操作。将 goroutines 和通道与 select 相结合是 Go 的强大功能。

    对于我们的示例,我们将跨两个通道进行选择。

    每个通道将在一段时间后收到一个值,以模拟例如在并发 goroutine 中执行的 RPC 操作。

    我们将使用同时等待这两个值,并在每个值到达时打印它们。select

    我们收到值,然后按预期接收。"one""two"

     

    $ go run timeouts.go 
    timeout 1
    result 2
     
  • 相关阅读:
    ios 视频旋转---分解ZFPlayer
    IOS lame库 pcm转mp3 分析(方案二)
    IOS lame库 pcm转mp3 分析(方案一)
    ios 动态库合成包(真机&模拟器)脚本
    lame 制作ios静态库
    React Native scrollview 循环播放
    React Native Image多种加载图片方式
    汉字转拼音(包含多音字)
    React Native Alert、ActionSheet
    React Native Picker (城市选择器)
  • 原文地址:https://www.cnblogs.com/biao/p/15628916.html
Copyright © 2011-2022 走看看