Go并发设计

本文介绍Go语言中的goroutine特性,包括其轻量化特点、调度机制、如何利用runtime包设置并行级别;同时深入探讨channel机制,包括不同类型的channel(阻塞与非阻塞)、channel的关闭及使用range迭代读取数据的方法,以及通过select关键字实现多channel间的切换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


goroutine(极少的栈内存,比thread更易用、更高效、更轻便)


runtime.Gosched()表示把CPU时间片让给别人,下次某个时候恢复执行该goroutine


想要发挥多核处理器的并行,设置runtime.GOMAXPROCS(n)


默认情况下,channel接受和发送数据都是阻塞的,除非另一端已经准备好,这样就使得goroutines同步变的更加的简单,而不需要显示的lock。


ch:=make(chan type,value)

value==0 ! 无缓冲(阻塞)

value>0  !缓冲 (非阻塞,直到value个元素)


range 能够不断的读取channel里面的数据,直到该channel被显示的关闭。

生产者通过关键字close函数关闭channel,


如果存在多个channel,Go提供了关键字select,通过select可以监听channel上的数据流动。select默认是阻塞的,只有当监听的channel中有发送或者接受可以进行时才会运行。,当多个channel都准备好的时候, select是随机的选择一个执行的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值