Go语言学习:GOMAXPROCS与G/M/P模型
需积分: 43 154 浏览量
更新于2024-08-10
收藏 1.7MB PDF 举报
"Go语言学习笔记,涵盖G, M, P模型,GOMAXPROCS的设置与工作原理,以及G和M的创建流程。"
Go语言是Google开发的一种静态类型的、编译型的、并发型的、垃圾回收的语言,特别适合构建高并发的服务。在Go中,我们经常会遇到三个关键的概念:Goroutine(G)、Worker Thread(M)和Processor(P)。这些概念是Go运行时系统的关键组成部分,用于管理并发执行。
Goroutine,简称G,是Go语言中的轻量级线程,由Go运行时自动调度。它们的开销非常小,允许程序创建大量并发任务而不会过度消耗资源。Goroutines之间的切换通常比操作系统线程更快,因为它们在用户空间进行调度。
Worker Thread,简称M,代表操作系统的线程。M是Go运行时与操作系统交互的实体,负责执行Goroutine并管理内存分配。每个M都必须关联一个P才能执行G。
Processor,简称P,是Go运行时的抽象处理器。P的数量与`GOMAXPROCS`环境变量设置的值相同,用于控制并发执行的粒度。P管理着一个G队列,当M需要执行G时,它会从P的队列中获取G。
`GOMAXPROCS`是一个重要的环境变量,用于设置可以同时执行的CPU核心数。默认值为1,意味着默认情况下,Go程序只使用一个CPU核心。你可以通过`runtime.GOMAXPROCS()`函数来改变这个值。例如,`runtime.GOMAXPROCS(2)`将设置为2个并发线程,而`runtime.GOMAXPROCS(0)`则会返回当前设置的值。
Go运行时的初始化过程中,会创建两个默认的Goroutine:一个是`main`,执行`main.main()`入口函数;另一个是`scavenger`,用于执行内存回收任务`MHeap_Scavenger`。
G和M的创建流程在Go运行时的`newproc1`函数中体现。这个函数负责创建一个新的Goroutine,并将其绑定到一个可用的M上。在创建Goroutine时,会为其分配栈空间,设置函数调用参数等。
Go语言的学习笔记持续更新,包含了从基础语法到高级特性的各种内容,如接口、方法、反射、包管理和标准库的使用,还有性能测试和调试技巧等。随着时间的推移,作者不断修订和完善笔记,以适应Go语言的版本更新和技术发展。
Go语言的并发模型是其强大之处,G、M、P三者协同工作,使得Go能够高效地处理并发任务。理解这些概念对于编写高效的Go代码至关重要。
165 浏览量
2021-12-05 上传
103 浏览量
2023-10-04 上传
2023-07-22 上传
2023-06-20 上传
2023-09-21 上传
2023-05-25 上传
2023-06-19 上传
Big黄勇
- 粉丝: 62
- 资源: 3927
最新资源
- 掌握压缩文件管理:2工作.zip文件使用指南
- 易语言动态版置入代码技术解析
- C语言编程实现电脑系统测试工具开发
- Wireshark 64位:全面网络协议分析器,支持Unix和Windows
- QtSingleApplication: 确保单一实例运行的高效库
- 深入了解Go语言的解析器组合器PARC
- Apycula包安装与使用指南
- AkerAutoSetup安装包使用指南
- Arduino Due实现VR耳机的设计与编程
- DependencySwizzler: Xamarin iOS 库实现故事板 UIViewControllers 依赖注入
- Apycula包发布说明与下载指南
- 创建可拖动交互式图表界面的ampersand-touch-charts
- CMake项目入门:创建简单的C++项目
- AksharaJaana-*.*.*.*安装包说明与下载
- Arduino天气时钟项目:源代码及DHT22库文件解析
- MediaPlayer_server:控制媒体播放器的高级服务器