不同通道上的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,并在两个不同的并发协程中往通道中发送数据。然后,我们创建一个新的并发

相关内容

热门资讯

实测教程"广东雀神智... 实测教程"广东雀神智能插件智能价格"开挂(下载)辅助下载有挂攻略-技巧教程;亲,广东雀神智能插件智能...
大家学习交流"西兵辅... 大家学习交流"西兵辅助器"开挂(透视)辅助透视有挂工具-线上教程;无需打开直接搜索薇:1367043...
分享一款"新西游拼十... 分享一款"新西游拼十辅助器"开挂(安装)辅助安装今日头条-必备教程 【无需打开直接搜索加薇13670...
分享一款"创思维激k... 分享一款"创思维激k辅助插件"开挂(脚本)辅助脚本有挂分享-线上教程创思维激k辅助插件ai黑科技系统...
1.9分钟了解"有哪... 【亲,有哪些免费的wpk辅助码 这款游戏可以开挂的,确实是有挂的,很多玩家在这款有哪些免费的wpk辅...
今日百科"茶馆辅助软... 今日百科"茶馆辅助软件"开挂(下载)辅助下载有挂方针-科技教程 >>您好:软件加薇136704302...
必知教程"决战十三辅... 必知教程"决战十三辅助器"开挂(透视)辅助透视有挂解惑-2026新版技巧 了解更多开挂安装加(136...
揭秘几款"金虎爷辅助... 大家好,今天小编来为大家解答金虎爷辅助器这个问题咨询软件客服可以免费测试直接加微信(13670430...
透视教学"星悦游戏辅... 透视教学"星悦游戏辅助论坛"开挂(软件)辅助软件有人有挂-规律教程;无需打开直接搜索薇:136704...
一分钟秒懂"poke... 一分钟秒懂"pokemmo辅助器脚本下载"开挂(透视)辅助透视有挂总结-必胜教程 【无需打开直接搜索...