go | chan 并发传输或者设置chan缓存|死锁

chan 在定义的时候设置缓存,或者定义一个协程,去获取chan 传输

如果不是这两种解决方案,会出现线程死锁问题

可以自行尝试

采用goroutine 并发执行

go 复制代码
//go 采用协程处理接受chan
package main

import (
	"fmt"
)

func main() {

	fmt.Println("Hello, 世界")

	// 创建一个整数类型的通道
	ch1 := make(chan int)
	ch2 := make(chan int)

	// 启动一个 Goroutine 并发地将通道 ch1 中的数据发送到通道 ch2 中
	go func() {
		tmp := <-ch1
		ch2 <- tmp
		fmt.Println("tmp ", tmp)
	}()

	// 向通道 ch1 发送数据
	ch1 <- 22

	// 从通道 ch2 中接收数据
	data := <-ch2

	// 打印接收到的数据
	fmt.Println("data:", data)

	fmt.Println("test end....")
}

输出结果

bash 复制代码
Hello, 世界
data: 22
test end....

设置chan 缓冲

go 复制代码
fmt.Println("Hello, 世界")

	// 创建一个整数类型的通道
	ch1 := make(chan int, 1)
	ch2 := make(chan int, 1)

	ch1 <- 22
	tmp := <-ch1
	// 从通道 ch2 中接收数据
	ch2 <- tmp
	tmp2 := <-ch2

	// 打印接收到的数据
	fmt.Println("tmp: ", tmp, "tmp2: ", tmp2)

	fmt.Println("test end....")

执行结果

bash 复制代码
Hello, 世界
tmp:  22 tmp2:  22
test end....

总结

go 的并发特别方便,成本也比开辟线程要低,那么同样的也会更容易的带来死锁问题。

相关推荐
mOok ONSC14 分钟前
对基因列表中批量的基因进行GO和KEGG注释
开发语言·数据库·golang
云烟成雨TD29 分钟前
Spring AI Alibaba 1.x 系列【30】Nacos Skill Registry 的底层设计与实现
java·人工智能·spring
Mr.敦的私房菜1 小时前
Spring AI 企业增强版(含安全版与合规版
人工智能·安全·spring
qiuyunoqy1 小时前
Redis 常见数据结构,编码方式
数据库·redis·缓存
Wild API1 小时前
Prompt 缓存实战:上下文分层、背景层拆分与缓存策略怎么做
缓存·prompt
Achou.Wang2 小时前
go语言中类型别名和定义类型之间的区别
服务器·golang
算.子2 小时前
【Spring AI 实战】八、完整 RAG 问答实战:检索 + 重排序 + 生成全链路
java·人工智能·spring
geovindu2 小时前
go: Composite Pattern
设计模式·golang·组合模式
2601_949816683 小时前
springcloud springboot nacos版本对应
spring boot·spring·spring cloud