go 多路复用(Multiplexing)

多路复用(Multiplexing)通常指的是通过 select 语句来同时监听多个通道的操作。简单来说,就是在一个地方等待多个通道中的任意一个有消息到来,一旦有消息到来,就执行相应的操作。

package main

import (
	"fmt"
	"time"
)

func main() {
	//创建两个无缓冲的通道ch1 ch2
	ch1 := make(chan string)
	ch2 := make(chan string)

/*go func() {...}() 的语法是为了创建一个新的 goroutine(轻量级线程),
并在其中执行函数中的代码。通过这种方式,可以实现并发执行,使得程序能够同时执行多个任务而不会被阻塞。


time.Sleep(1 * time.Second)
在并发程序中,有时需要控制各个 goroutine 之间的执行顺序和速度
 在并发程序中,某些操作可能会导致资源竞争,通过在 goroutine 中使用 time.Sleep 可以间接地减少竞争条件的发生,从而提高程序的稳定性。
*/
	go func() {
		for {
			time.Sleep(1 * time.Second)
			ch1 <- "from ch1"//发送数据from ch1到ch1通道中
		}
	}()

	go func() {
		for {
			time.Sleep(2 * time.Second)
			ch2 <- "from ch2"发送数据from ch2到ch2通道中
		}
	}()

	for {
		select {
		case msg1 := <-ch1://接收ch1通道传来的数据
			fmt.Println("ch1:", msg1)//输出
		case msg2 := <-ch2://接收ch2通道传来的数据
			fmt.Println("ch2:", msg2)//输出
		}
	}
	/*这样写的好处在于:
	使用无限循环 for { ... } 结合 select 可以持续监听多个通道,保证程序能够持续接收和处理消息。
	 这段代码可以用于并发场景下的消息处理,比如同时从多个通道接收消息,并对消息进行处理。一旦有消息到达,就会立即进行处理,而不必等待其他通道。
	*/
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贵哥的编程之路(热爱分享)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值