导航菜单

Go语言/Channel与Goroutine
课程进度 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调度是抢占式的,自动切换