前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >go 多路复用(Multiplexing)

go 多路复用(Multiplexing)

作者头像
贵哥的编程之路
发布2024-03-23 08:03:05
890
发布2024-03-23 08:03:05
举报

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

代码语言:javascript
复制
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 可以持续监听多个通道,保证程序能够持续接收和处理消息。
	 这段代码可以用于并发场景下的消息处理,比如同时从多个通道接收消息,并对消息进行处理。一旦有消息到达,就会立即进行处理,而不必等待其他通道。
	*/
}
本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2024-03-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com