面试题:对于GoRoutine的调度理解(GMP)

简介: 对于GoRoutine的调度,使用了一种称为GMP的调度模型

对于GoRoutine的调度,使用了一种称为GMP的调度模型。

GMP是Go语言运行时系统中的调度器,用于管理GoRoutine的创建、调度和销毁。

字面意思:

  1. G (Goroutine):G是Go语言中的轻量级协程,即GoRoutine。它由Go语言运行时系统创建和管理,并且可以在操作系统的线程上运行。每个GoRoutine都包含了自己的栈空间,用于存储局部变量和函数调用信息等。
  1. M (Machine):M代表一个操作系统线程(Machine),它负责在操作系统线程上运行GoRoutine。M的数量由Go语言运行时系统根据实际情况动态调整,以实现并行执行。
  1. P (Processor):P是一个处理器,它将GoRoutine与M关联起来,并负责在M上运行GoRoutine。P的数量由Go语言运行时系统固定设置。如果一个GoRoutine由于某种原因被阻塞,P会将其与M分离,切换到其他可运行的GoRoutine上运行。

GMP调度的核心思想是将GoRoutine和M绑定在一起,并使用P在M上运行GoRoutine。通过这种方式,可以实现高效的并发调度,同时避免了过多的线程创建和切换开销。

值得注意的是,Go语言运行时系统使用了抢占式调度(Preemptive Scheduling),即允许系统在任何时候中断当前正在运行的GoRoutine,并切换到其他可运行的GoRoutine上运行。这种调度策略确保了所有的GoRoutine都有机会被执行,并且有效地避免了饥饿问题(Starvation Problem)的发生。

总结来说,GMP调度模型通过将GoRoutine与M绑定,并使用P在M上运行GoRoutine,实现了高效的并发调度。同时,抢占式调度策略保证了所有GoRoutine的公平执行。这种调度模型是Go语言在并发编程中的核心机制。

目录
相关文章
|
5天前
|
安全 Go 开发者
Golang深入浅出之-Go语言并发编程面试:Goroutine简介与创建
【4月更文挑战第22天】Go语言的Goroutine是其并发模型的核心,是一种轻量级线程,能低成本创建和销毁,支持并发和并行执行。创建Goroutine使用`go`关键字,如`go sayHello("Alice")`。常见问题包括忘记使用`go`关键字、不正确处理通道同步和关闭、以及Goroutine泄漏。解决方法包括确保使用`go`启动函数、在发送完数据后关闭通道、设置Goroutine退出条件。理解并掌握这些能帮助开发者编写高效、安全的并发程序。
14 1
|
10月前
|
缓存 并行计算 算法
Golang面试前三夜准备:Goroutine调度器GMP为何需要P?不需要会怎样?
Golang面试前三夜准备:Goroutine调度器GMP为何需要P?不需要会怎样?
|
Prometheus 监控 Cloud Native
面试高频:Go语言死锁与goroutine泄露问题谈论
面试高频:Go语言死锁与goroutine泄露问题谈论
|
2月前
|
Java 程序员
java线程池讲解面试
java线程池讲解面试
62 1
|
3月前
|
存储 关系型数据库 MySQL
2024年Java秋招面试必看的 | MySQL调优面试题
随着系统用户量的不断增加,MySQL 索引的重要性不言而喻,对于后端工程师,只有在了解索引及其优化的规则,并应用于实际工作中后,才能不断的提升系统性能,开发出高性能、高并发和高可用的系统。 今天小编首先会跟大家分享一下MySQL 索引中的各种概念,然后介绍优化索引的若干条规则,最后利用这些规则,针对面试中常考的知识点,做详细的实例分析。
253 0
2024年Java秋招面试必看的 | MySQL调优面试题
|
3月前
|
存储 算法 Java
铁子,你还记得这些吗----Java基础【拓展面试常问题型】
铁子,你还记得这些吗----Java基础【拓展面试常问题型】
48 1
|
3月前
|
NoSQL Java 关系型数据库
凭借Java开发进阶面试秘籍(核心版)逆流而上
最近参加了面试或者身边有朋友在面试的兄弟有没有发现,现在的面试不仅会问八股文,还会考察框架、项目实战、算法数据结构等等,需要准备的越来越多。 其实面试的时候,并不是要求你所有的知识点都会,而是关键的问题答到点子上!这份《Java 开发进阶面试秘籍(核心版)》由 P8 面试官整体把控,目前已经更新了 30 万字! 资料中涵盖了一线大厂、中小厂面试真题,毕竟真题都是技术领域最经典的基础知识和经验沉淀的汇总,非常有必要学习掌握!双重 buff 叠加,offer 接到手软~ 点击此处取,这可能是你到目前为止领取的最具含金量的一份资料! 整套资料涵盖:Spring、Spring
|
3月前
|
存储 缓存 Java
面试官:什么是Java内存模型?
面试官:什么是Java内存模型?
113 0
面试官:什么是Java内存模型?
|
2月前
|
消息中间件 NoSQL 网络协议
Java面试知识点复习​_kaic
Java面试知识点复习​_kaic
|
7天前
|
Java 调度
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
Java面试必考题之线程的生命周期,结合源码,透彻讲解!
37 1