课程进度 45% · 第11/23章第11/23章 · 标签 1/4
— 1 —
Channel基础
Channel是Go并发模型的核心,用于goroutine间的通信。
go
1
// 创建无缓冲channel
2
ch := make(chan int)
3
// 创建有缓冲channel
4
ch2 := make(chan string, 3)
5
6
// 发送和接收
7
ch <- 10
8
x := <-ch
9
10
// 关闭channel
11
close(ch)
- 无缓冲channel发送和接收必须同步
- 有缓冲channel可异步发送,缓冲满时阻塞
- 关闭channel后不能再发送数据
— 2 —
Goroutine调度
Go运行时调度器负责管理Goroutine的执行,支持GOMAXPROCS设置并发核数。
go
1
import "runtime"
2
3
// 设置最大CPU核数
4
runtime.GOMAXPROCS(4)
5
6
// Goroutine调度示例
7
for i := 0; i < 3; i++ {
8
go func(n int) {
9
fmt.Println("goroutine", n)
10
}(i)
11
}
12
13
// 主协程等待
14
var input string
15
fmt.Scanln(&input)
- GOMAXPROCS控制并发线程数,默认等于CPU核数
- Goroutine调度是抢占式的,自动切换