golang 高频面试题

news/2025/3/10 19:13:47/文章来源:https://www.cnblogs.com/sliverf/p/18637559

简述 Goroutine 的调度流程?

  

Goroutine 是 Go 语言中的轻量级线程,Go 运行时使用调度器来管理 Goroutine 的执行。调度器的设计旨在高效地利用系统资源,并在多个 Goroutine 之间公平地分配 CPU 时间。以下是 Goroutine 调度的简要流程:

  1. Goroutine 的创建:当通过 go 关键字启动一个新的 Goroutine 时,运行时系统会为其分配一个新的 Goroutine 结构体(G),其中包含了该 Goroutine 的栈、程序计数器和其他状态信息。

  2. 运行队列:每个 P(处理器,Processor)拥有一个本地运行队列,存储待运行的 Goroutine。全局运行队列用于存储那些没有立即分配到 P 的 Goroutine。当一个新的 Goroutine 被创建时,它通常会被放入当前 P 的本地队列中。

  3. 调度循环

    • 每个 P 循环从其本地运行队列中取出 Goroutine 并运行。
    • 如果本地队列为空,P 会尝试从全局队列中获取 Goroutine。
    • 如果全局队列也为空,P 会尝试从其他 P 的本地队列中窃取一部分 Goroutine 以平衡负载。
  4. 上下文切换:Goroutine 调度器会在以下情况下执行上下文切换:

    • 当前 Goroutine 主动让出 CPU(例如通过调用 runtime.Gosched())。
    • 当前 Goroutine 阻塞(例如通过等待 I/O 或锁)。
    • 定时的抢占调度,确保长时间运行的 Goroutine 不会独占 CPU。
  5. 抢占调度:Go 1.14 引入了基于信号的抢占机制,允许调度器在必要时中断正在运行的 Goroutine,以便其他 Goroutine 也能获得执行机会。这是通过在 Goroutine 执行的函数序列中插入检查点实现的。

  6. M-P-G 模型:Go 使用 M(Machine)、P、G 模型来管理并发执行:

    • M 代表操作系统线程,负责执行 Go 代
    • P 代表逻辑处理器,管理调度队列,控制可并发执行的上下文。
    • G 代表 Goroutine,实际的并发任务。

通过这些机制,Go 的调度器能够有效地管理大量 Goroutine,从而实现高效的并发执行。

 

调度的流程状态:

 

简述 Golang 垃圾回收的机制 

简单介绍 GMP 模型以及该模型的优点 

Golang 是如何实现 Maps 的?

简述 defer 的执行顺序

有缓存的管道和没有缓存的管道区别是什么?

简述 slice 的底层原理,slice 和数组的区别是什么?

Channels 怎么保证线程安全?

Maps 是线程安全的吗?怎么解决它的并发安全问题?

协程与进程,线程的区别是什么?协程有什么优势?

线程是独立调度的基本单位,进程是资源拥有的基本单位。

线程创建、管理、调度等采用的方式称为线程模型。线程模型一般分为以下三种:

  • 内核级线程(Kernel Level Thread)模型
    • 由系统内核创建,创建成本高,上下文切换成本高,上下文切换需要硬件支持,如果线程阻塞,其他线程可以继续执行,进程不会阻塞,应用案例:Window Solaris
  • 用户级线程(User Level Thread)模型
    • 由应用程序创建,创建成本低,上下文切换成本低,上下文切换不需要硬件支持,(因为保存线程状态的过程和调用程序都只是本地过程,如果线程阻塞,整个进程将被阻塞)。即不能利用多处理来发挥并发优势,应用案例:Java thread, POSIX threads
  • 两级线程模型,也称混合型线程模型
    • 充分吸收上面两种模型的优点,尽量规避缺点。其线程创建在用户空间中完成,线程的调度和同步也在应用程序中进行。一个应用程序中的多个用户级线程被绑定到一些(小于或等于用户级线程的数目)内核级线程上。

 

 

Golang 的一个协程能保证绑定在一个内核线程上吗?

Golang 的协程可以自己主动让出 CPU 吗? 

Golang 有哪些优缺点、错误处理有什么优缺点?

两次 GC 周期重叠会引发什么问题,GC 触发机制是什么样的?

Golang 的协程通信方式有哪些?

简述 Golang 的伪抢占式调度

什么是 goroutine 泄漏

groutinue 什么时候会被挂起?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/860435.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NetBackup备份恢复工作流程workflow

# NetBackup备份恢复工作流程 在早期的NetBackup Troubleshooting guide中,详细描述了备份和恢复的步骤以及各个进程之间的调用关系,但是7.7以后的文档把这部分内容给取消了。在logging reference里面有类似内容,但是讲得不太清晰。备份流程从客户端或者Master Server GUI发…

如何快速体验chatGPT(AI问答)

由于账号的原因无法使用chatGPT,那有什么其他的办法可以体验一下这样的AI问答呢? 1、豆包 https://www.doubao.com/ 2、在魔塔modelscope的选择要体验的模型,在model详情页里,体验模型 https://www.modelscope.cn/studios/Qwen/QwQ-32B-preview/ 3、智谱AI https://open.…

合作招募

介绍 2025年将为潜在客户解决技术问题,并整理技术文档以满足其需求。根据问题的复杂度,文档的字数通常在1000-2500字之间,并配有相关截图 但为了提高合作效率并确保项目成功,彼此需共同承担部分前期成本(单次共承担最高不超30元,可当做找工作时的路费)。 该费用用于支持前…

第三次Blog 题目集7~8

一,前言 在题目集7和8中,我们逐步完善了智能家居强电电路模拟程序的功能和复杂性。题目集7以基本电路元件的特性和连接为核心,涵盖了开关、调速器、灯、风扇等设备的模拟,实现了多种控制设备和受控设备的电路设计与状态输出;而题目集8在此基础上新增了管脚电压显示、电流限…

题集7-8的总结

一:前言: 1.知识点:主要包括类和对象的使用、数据封装、方法的定义和使用、继承、多态、泛型、抽象类,集合框架,异常处理,字符串处理、以及基本的输入输出操作。 2.题量:现在的题目集都是一道题了,题量没什么说的。 3.难度:每次题集的难度都较大,每次都要7.8小时及以…

『联合省选2025集训』『图的连通性进阶』 知识点 总结

若有长风绕旗,那便是我在想你了。前言若有长风绕旗,那便是我在想你了。这周讲了个图论连通性板块的一些进阶知识,周六全国第一给我们讲了一些树上的问题,感觉树剖板块实现难度较大,后面几道偏思维的题会有些许好转。 这里就先写写连通性相关的进阶的一些知识点吧。 主要涵…

『联合省选2025集训』『耳分解,双极定向,三连通分量』 知识点 总结

若有长风绕旗,那便是我在想你了。前言若有长风绕旗,那便是我在想你了。这周讲了个图论连通性板块的一些进阶知识,周六全国第一给我们讲了一些树上的问题,感觉树剖板块实现难度较大,后面几道偏思维的题会有些许好转。 这里就先写写连通性相关的进阶的一些知识点吧。 主要涵…

第七-八次作业总结

一、前言 该系列题目均为设计与实现一个家居强电电路模拟程序,题目难度复杂度逐步提升,题目数量和输入信息也逐步增加。以下是对这两道题的总结: 1. 知识点家居强电电路模拟程序-3 受控窗帘设备的模拟 多个并联电路串联在一起的情况 串联电路中包含其他串联电路的情况 家居强…

AD 原理图如何进行DRC检查

如果画到PCB才发现原理图画错了,那么就为时太晚了。 画完或者后期修改PCB应该及时进行原理图的DRC检查。 1. 右下角Panels打开工程: 2. 然后我们选中整个工程的工程处,点击右键: 3. 然后左键点击compile PCB Project......... : 参考资料: https://www.fanyedu.com/content…

Vue3甘特图 - dhtmlx-gantt

Vue3甘特图 <template><div style="height:100%; background-color: white"><div id="gantt_here" style="width:100%; height:100%;"></div></div> </template><script setup> import { onMounted }…

恍恍惚惚,走到了尾声

课程链接 https://edu.cnblogs.com/campus/fzu/SE2024/作业链接 https://edu.cnblogs.com/campus/fzu/SE2024/homework/13315作业目标 回顾自己的软工实践课程学号 102202157一、学期回顾 1.1 回顾你对于软件工程课程的想象在课程开始前,我一直以为软件工程课程会聚焦于各种编…

转正了!!!!!!!!

近期&感受、问题: 1.版本优化描述:秘境排行榜;一键探险功能的顺序;背包随机类宝箱一键开启;美食家一键合成闪光美食;电玩活动跳过动画功能;许愿池自动投币;结晶一键熔炼 感受/反思:感觉自己菜菜的QAQ,各种版本的本地数据处理错误(删早了删晚了/先notify后notify…