Go限制运行时操作系统线程数量

Go语言的运行时系统使用了自己的调度器,该调度器使用了M:N模型,即M个goroutine可以在N个操作系统上进行调度。我们可以通过设置环境变量GOMAXPROCS或者使用runtime包中的GOMAXPROCS函数来限制Go程序可以使用的操作系统数。默认情况下,GOMAXPROCESS的值为系统的CPU核数。

go 复制代码
package main

import (
	"fmt"
	"runtime"
	"sync"
)

func main() {
	// 设置最大可用的 CPU 核心数为 2
	runtime.GOMAXPROCS(2)

	// 使用 WaitGroup 等待两个 goroutine 完成
	var wg sync.WaitGroup
	wg.Add(2)

	go func() {
		defer wg.Done()
		for i := 1; i <= 5; i++ {
			fmt.Println("A", i)
		}
	}()

	go func() {
		defer wg.Done()
		for i := 1; i <= 5; i++ {
			fmt.Println("B", i)
		}
	}()

	// 等待所有 goroutine 完成
	wg.Wait()
}

虽然GOMAXPROCS可以限制Go程序可以使用的操作系统线程数量,但最好不要轻易设置这个值,因为正常情况下,Go会自己觉得使用的线程数以保证运行时最高的效率和性能。

而在实际应用中,GOMAXPROCS往往使用于一个CPU核数非常多而且都处于高负载的机器上,防止CPU过度竞争。

最后给大家推荐一个LinuxC/C++高级架构系统教程的学习资源与课程,可以帮助你有方向、更细致地学习C/C++后端开发,具体内容请见 https://xxetb.xetslk.com/s/1o04uB

相关推荐
桃园码工5 小时前
1-Gin介绍与环境搭建 --[Gin 框架入门精讲与实战案例]
go·gin·环境搭建
云中谷5 小时前
Golang 神器!go-decorator 一行注释搞定装饰器,v0.22版本发布
go·敏捷开发
苏三有春13 小时前
五分钟学会如何在GitHub上自动化部署个人博客(hugo框架 + stack主题)
git·go·github
我是前端小学生1 天前
Go语言中的方法和函数
go
探索云原生1 天前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu
自在的LEE2 天前
当 Go 遇上 Windows:15.625ms 的时间更新困局
后端·kubernetes·go
Gvto2 天前
使用FakeSMTP创建本地SMTP服务器接收邮件具体实现。
go·smtp·mailtrap
白泽来了3 天前
【Go进阶】手写 Go websocket 库(一)|WebSocket 通信协议
开源·go
witton3 天前
将VSCode配置成Goland的视觉效果
ide·vscode·编辑器·go·字体·c/c++·goland
非凡的世界3 天前
5个用于构建Web应用程序的Go Web框架
golang·go·框架·web