go面试题系列-GMP模型

1.go的并发模型GMP

Go 的 GMP 模型指的是 Goroutine(G)、调度器(M),以及操作系统线程(P)之间的关系和协作模型。这个模型是 Go 语言运行时系统的核心组成部分,用于实现高并发和并行执行的特性。

以下是 GMP 模型的主要组成部分:

Goroutine (G):Goroutine 是 Go 语言中的轻量级线程。它们由 Go 运行时系统管理,并在单个操作系统线程(P)上运行。
			   Goroutine 是并发执行的基本单位,可以启动成千上万个 Goroutine,而不会导致太多的线程开销。
			   Goroutine 之间通过通道(Channel)进行通信和同步。

调度器 (M):调度器是 Go 运行时系统的一部分,负责管理和调度 Goroutine 的执行。
			调度器会将 Goroutine 分配给操作系统线程(P)来运行。
			如果某个 Goroutine 阻塞(例如等待 I/O 操作完成),调度器会将其暂停并重新调度其他可运行的 Goroutine。
			调度器还处理抢占式调度,以确保 Goroutine 公平地共享 CPU 时间。

操作系统线程 (P):操作系统线程是底层硬件的线程,它们由 Go 运行时系统管理。
				每个操作系统线程(P)都有一个调度器(M),它负责运行 Goroutine。
				Go 运行时系统会根据需要创建或销毁操作系统线程,以适应 Goroutine 的工作负载。
schedt:主要放置空闲的gp,管理gp 初始化做的事空间申请、M的最大数量设置、P的数量设置、初始化参数和环境

GMP 模型的优点包括:

轻量级:Goroutine 是非常轻量级的,可以高效创建和销毁,几乎不会产生额外的开销。
并发性:Goroutine 可以非常容易地实现并发编程,使得编写并发程序变得更加简单。
高效的调度:调度器负责在不同的操作系统线程之间分配 Goroutine,以充分利用多核 CPU。
抢占式调度:调度器可以在 Goroutine 阻塞时抢占执行权,确保 Goroutine 公平地竞争 CPU 时间。
高并发性:GMP 模型允许应用程序同时运行大量的 Goroutine,有效地支持高并发。

2.程序启动的时候gmp做了什么呢

在这里插入图片描述

3.go func()的时候都做了什么

在这里插入图片描述

3.m创建

在这里插入图片描述

4. p创建

在这里插入图片描述

5.引用

本文引用了这篇博客的图片
戳我过去

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值