GO并发编程专题测试
考察知识点
1. Goroutine基础
- 创建方式:
go关键字启动goroutine - 特性特点:轻量级、初始栈2KB、运行时调度
- 与主goroutine关系:并发执行、非操作系统线程
- 创建成本:极低,可轻松创建数万个goroutine
2. Channel通信机制
- Channel基础:创建、发送、接收、关闭
- 缓冲Channel:带缓冲vs无缓冲、容量设置
- 单向Channel:只读、只写、类型安全
- Channel关闭:close操作、检测关闭、遍历已关闭channel
3. Select多路复用
- Select语法:多channel同时监听
- 随机选择:多个case可执行时随机选择
- Default分支:非阻塞操作、立即返回
- 阻塞行为:无可用case时阻塞等待
- for+select组合:持续监听、实现退出机制
4. 并发同步原语
- Mutex/RWMutex:互斥锁、读写锁、锁竞争
- sync.WaitGroup:等待一组goroutine完成
- sync.Once:单次执行、单例模式
- sync.Cond:条件变量、等待/通知
- sync.Pool:对象池、减少分配
- atomic包:原子操作、CAS
5. 并发设计模式
- Worker Pool:固定worker处理任务队列
- Pipeline:阶段式数据处理、链式传递
- Fan-out/Fan-in:多worker并行+结果合并
- Producer-Consumer:生产者消费者模式
- 优雅退出:context取消、done channel
6. 竞态检测与调试
-竞态检测:-race编译参数、检测数据竞争
- pprof goroutine:查看goroutine状态
- runtime调试:GODEBUG参数、栈dump
- 死锁预防:避免循环等待、设置超时
- Goroutine泄露:检测方法、预防策略
7. Context上下文
- Context作用:取消传播、超时控制、值传递
- context包函数:WithCancel、WithTimeout、WithValue
- 使用规范:传递参数而非存储、函数参数传递
8. 并发安全设计
- 数据竞争:共享变量访问、同步保护
- 无锁设计:atomic操作、CAS替代锁
- 并发map:sync.Map使用场景
- 不可变数据:只读、避免共享
Go语言中创建一个新的goroutine使用哪个关键字?
goroutine是操作系统线程,由操作系统内核调度。
当主goroutine执行完毕退出时,其他正在运行的goroutine也会立即终止。
Go的sync包中,用于等待一组goroutine完成的是哪个类型?
关于sync.Mutex的正确使用,以下说法正确的是?
sync.Once可以确保某个函数在程序运行期间只执行一次,即使多次调用Do方法。
关于Go调度器的调度策略,以下说法正确的是?
关于Go的select语句行为,以下说法正确的是?
channel可以多次调用close函数进行关闭。
使用for range遍历channel时,channel关闭后循环会自动结束。
以下哪些是Go中常见的并发设计模式?
关于Go的context传播和取消规则,以下说法正确的是?
Go的竞态检测器通过哪个标志启用?
当goroutine被channel操作阻塞时,可以通过runtime调试信息查看阻塞原因。
sync.WaitGroup提供了三个核心方法:______ 用于增加等待计数,______ 用于减少计数(通常配合defer使用),______ 用于阻塞等待计数归零。调用 ______ 必须在goroutine启动之前完成。
Go中使用select语句处理多个channel的主要目的是?
关于Go的Pipeline(管道)并发模式,以下说法正确的是?
解决数据竞争的主要方法包括:使用 ______ 互斥锁保护共享变量、使用 _______ 读写锁处理读多写少场景、使用 ______ 包进行原子操作、使用 _______ 进行goroutine间通信。Go的竞态检测器通过 ______ 标志启用。
可以用channel实现简单的互斥锁:创建容量为 ______ 的缓冲channel作为令牌,______ 时从channel接收(令牌取出),______ 时向channel发送(令牌归还)。这种方式称为 ________,比sync.Mutex更灵活但性能较低。
📝 发现内容有误?点击此处直接编辑
长按或扫描二维码,立即体验