不同通道上的select与多个并发协程有逻辑或性能上的区别吗?
创始人
2025-01-09 19:33:55
0

在多个并发协程中,可以使用select同时监听多个通道的数据。例如:

package main

import (
    "fmt"
)

func main() {
    ch1 := make(chan int)
    ch2 := make(chan int)

    go func() {
        for i := 0; i < 5; i++ {
            ch1 <- i
        }
    }()
    go func() {
        for i := 5; i < 10; i++ {
            ch2 <- i
        }
    }()

    for i := 0; i < 10; i++ {
        select {
        case x := <-ch1:
            fmt.Printf("Received %d from ch1\n", x)
        case x := <-ch2:
            fmt.Printf("Received %d from ch2\n", x)
        }
    }
}

在上面的代码中,我们创建了两个通道ch1和ch2,并在两个不同的并发协程中往通道中发送数据。然后,在主协程中使用select同时监听两个通道,只有一个通道中有数据时,就会执行对应的代码块。

我们将代码改为使用多个并发协程同时监听同一个通道:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int)

    go func() {
        for i := 0; i < 5; i++ {
            ch <- i
        }
    }()
    go func() {
        for i := 5; i < 10; i++ {
            ch <- i
        }
    }()
    go func() {
        for {
            select {
            case x := <-ch:
                fmt.Printf("Received %d\n", x)
            }
        }
    }()

    time.Sleep(time.Second)
}

在上面的代码中,我们创建了一个通道ch,并在两个不同的并发协程中往通道中发送数据。然后,我们创建一个新的并发

相关内容

热门资讯

我来教教大家!九游辅助工具,微... 我来教教大家!九游辅助工具,微信小程序途游辅助免费,详细方法(有挂解惑)1、打开软件启动之后找到中间...
盘点几款!钱塘十水三攻略,美猴... 盘点几款!钱塘十水三攻略,美猴王大厅怎么修改数据,详细软件(真的有挂)暗藏猫腻,小编详细说明美猴王大...
必备辅助推荐!蜀渝牌血战到底辅... 必备辅助推荐!蜀渝牌血战到底辅助,纳祥游戏科技,详细技巧(今日头条)1、进入游戏-大厅左侧-新手福利...
揭秘几款!奇迹陕西麻将辅助器,... 揭秘几款!奇迹陕西麻将辅助器,天天开心王国辅助器,详细教程(发现有挂)1、游戏颠覆性的策略玩法,独创...
盘点一款!大唐撸麻雀作弊码,潮... 盘点一款!大唐撸麻雀作弊码,潮汕馆辅助,详细方法(的确有挂)1、大唐撸麻雀作弊码免费脚本咨询教程、大...
终于清楚!欢乐卡五星插件,微信... 终于清楚!欢乐卡五星插件,微信新版518互游辅助,详细工具(有挂解密)1、游戏颠覆性的策略玩法,独创...
分辨真假!518互游辅助器下载... 分辨真假!518互游辅助器下载,顺欣茶楼开挂,详细教程(有挂工具)1、518互游辅助器下载破解器简单...
最新技巧!雀友会广东潮汕苹果开... 您好,雀友会广东潮汕苹果开挂这款游戏可以开挂的,确实是有挂的,需要了解加去威信【136704302】...
一分钟秒懂!海米大厅辅助,瑞安... 一分钟秒懂!海米大厅辅助,瑞安玉海楼茶苑辅助器,详细挂(发现有挂)一、瑞安玉海楼茶苑辅助器游戏安装教...
总算了解!雀神广东定制插件辅助... 总算了解!雀神广东定制插件辅助,欢乐达人暗堡破解,详细技巧(有挂教程)1、雀神广东定制插件辅助有没有...