全部学科
NodeJS全栈
nodejs
Python全栈
python
小程序首页
📝 1 篇文章 20 道配套习题

GO运行时专题

专题说明

本专题深入讲解Go运行时的核心机制,帮助进阶开发者理解GMP调度模型、内存管理、垃圾回收、网络轮询器等底层原理,掌握Go高性能编程的关键知识。

学习目标

  1. 理解GMP调度模型的工作原理与调度策略
  2. 掌握内存管理三层结构(mcache/mcentral/mheap)
  3. 理解三色并发标记清除垃圾回收算法
  4. 掌握网络轮询器(Net Poller)的高效I/O机制
  5. 理解系统调用处理与M状态转换
  6. 掌握接口内部实现结构(iface/eface/itab)

学习内容

  • GMP调度模型:G/M/P关系、调度策略、抢占机制
  • 内存管理:mcache本地缓存、mcentral中央缓存、mheap全局堆
  • 垃圾回收:三色标记、并发标记清除、写屏障、GC触发条件
  • 网络轮询器:epoll/kqueue/IOCP、非阻塞I/O、G挂起与唤醒
  • 系统调用:M状态转换、P handoff机制、sysmon监控
  • 接口实现:eface空接口、iface非空接口、itab结构

学习建议

  1. 运行时是Go的核心,建议结合源码深入理解
  2. 重点理解GMP模型,这是理解Go并发的基础
  3. 了解内存管理层次,有助于优化内存使用
  4. 理解Net Poller原理,掌握高效网络编程
  5. 学习接口内部实现,理解Go类型系统的设计

📝 发现内容有误?点击此处直接编辑

📝 配套习题(20 题)

1
单选题

Go运行时的网络轮询器(Net Poller)使用什么技术实现高效的网络I/O?

A

多线程阻塞I/O

B

事件驱动非阻塞I/O(epoll/kqueue/IOCP)

C

协程模型

D

单线程轮询

2
单选题

当Goroutine执行网络I/O操作(如conn.Read)且数据未就绪时,会发生什么?

A

阻塞OS线程,等待数据

B

Goroutine挂起,OS线程继续执行其他Goroutine

C

返回错误,立即失败

D

创建新OS线程继续等待

3
多选题

Go运行时对系统调用的处理策略包括哪些?

A

网络I/O使用Net Poller(非阻塞)

B

文件I/O使用阻塞系统调用

C

系统调用进入时M线程进入Syscall状态

D

长时间系统调用可能导致M线程被抢占

4
判断题

Go的文件I/O(如os.File.Read)使用阻塞系统调用,而网络I/O使用Net Poller实现非阻塞,这是因为文件I/O通常能快速返回数据,而网络I/O可能需要长时间等待。

A

B

5
填空题

Go Net Poller底层:Linux使用 ______ ;macOS使用 ______ ;Windows使用 ______ 。Goroutine网络I/O时 ______ 而非 _______________ 监控 ___________________

6
填空题

Go系统调用处理:M进入 _______ 状态; ______ 可能被 ______ 接管; ______ 监控 _____________________ 使用 ______ 系统调用; _______ 使用 __________

7
单选题

Go运行时内存分配器采用什么层次结构管理内存?

A

单层堆结构

B

mcache → mcentral → mheap三层结构

C

仅使用系统malloc

D

栈和堆分离结构

8
单选题

Go的mcache为什么能实现无锁分配?

A

使用全局锁保护

B

每个P独享一个mcache,无需竞争

C

不支持并发分配

D

使用CAS原子操作

9
多选题

Go内存分配器使用大小类别(size class)来管理内存,以下哪些说法正确?

A

有67种预定义的大小类别

B

最小分配单元是8字节

C

每种大小类别对应一个span

D

对象大小超过32KB直接从mheap分配

10
判断题

span是Go内存管理的基本单元,一个span包含多个相同大小的内存对象,大小由size class决定。

A

B

11
填空题

Go内存分配三层: ______ ________ 每P独享 ______________ ________________ 组织; ______ ____________ 申请大块 ______

12
单选题

Go调度器的GMP模型中,P代表什么?

A

Processor(处理器/调度资源)

B

Process(进程)

C

Parallel(并行)

D

Pool(池)

13
单选题

Goroutine执行网络I/O操作等待数据时,会进入什么状态?

A

Running(运行中)

B

Waiting(等待中)

C

Dead(已终止)

D

Runnable(可运行)

14
多选题

关于P的本地运行队列,以下哪些说法正确?

A

每个P有一个本地G队列,容量256

B

本地队列无锁访问,效率高

C

本地队列空时会从全局队列偷取G

D

本地队列满时G会进入全局队列

15
判断题

一个M必须绑定一个P才能执行G,但一个P可以绑定不同的M(例如原M进入系统调用时)。

A

B

16
单选题

Go垃圾回收使用什么类型的GC算法?

A

分代GC(Generational GC)

B

引用计数GC

C

并发标记清除GC(Concurrent Mark-Sweep)

D

复制GC

17
单选题

Go类型断言v.(T)的内部实现主要检查什么?

A

类型名称是否相同

B

类型hash值是否匹配

C

方法列表是否相同

D

内存大小是否相同

18
多选题
A

静态类型(编译时检查)

B

结构化类型系统(鸭子类型)

C

接口隐式实现

D

类型安全(无隐式转换)

19
判断题

一个包含nil指针的接口变量不等于nil,因为接口内部包含类型信息,只有类型和数据都为nil时接口才为nil。

A

B

20
填空题

Go接口内部: ___________ 包含 __________________ 包含 __________________ 包含 ______________________

← 上一个专题 GO流程控制专题

📝 发现内容有误?点击此处直接编辑

想查看更多习题和详细解析?
小程序提供完整的题库和详细解析

长按或扫描二维码,立即体验

扫码体验小程序
马上就来
使用微信扫描二维码
立即体验完整题库