27、Go语言并发编程:Goroutines与Channels深度解析

Go语言并发编程:Goroutines与Channels深度解析

1. 并发与并行:Goroutines的运行机制

在Go语言中,Goroutines是实现并发的关键。多个Goroutines可以同时启动,但默认情况下它们是并发运行,而非并行运行,即同一时刻只有一个Goroutine在执行。

为了让程序能够真正并行执行,也就是让Goroutines在多个核心上同时运行,我们需要使用 GOMAXPROCS 变量。这个变量会告知运行时系统同时执行的Goroutines数量。

只有gc编译器(如6g或8g)对Goroutines有真正的实现,它会将Goroutines映射到合适的操作系统线程上。而使用gccgo编译器时,每个Goroutine都会创建一个操作系统线程。

1.1 使用GOMAXPROCS

在gc编译器下,必须将 GOMAXPROCS 设置为大于默认值1,才能让运行时系统利用多个操作系统线程。也就是说,除非 GOMAXPROCS 大于1,否则所有Goroutines都共享同一个线程。当 GOMAXPROCS 大于1时,Goroutines会在一个线程池中运行,线程池的线程数量等于 GOMAXPROCS 的值。

假设机器上有n个处理器或核心,如果将环境变量 GOMAXPROCS 设置为大于等于n,或者调用 runtime.GOMAXPROCS(n) ,那么Goroutines会被分配到n个处理器上。但更多的

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值