2025-07-23 09:25AM
Go 的并发哲学:"Do not communicate by sharing memory; instead, share memory by communicating." (通过通信共享内存,而非通过共享内存进行通信)
在go语言中,goroutine是实现并发的核心特性,它是轻量级的执行线程,由go运行时管理
并发模型:
通过go的关键字启动:go funcName()
非阻塞式启动,立即返回主线程
与channel配合实现通信(而非共享内存)
调度机制:
基于GMP模型(Goroutine,Machine,Processor)
工作窃取(Work-stealing)算法自动负载均衡
非抢占式协作调度(1.14+ 支持部分抢占)
eg:
package main
import "fmt"
// 一个整数切片values和一个用于发送结果的通道resultChan(只发送int类型)
func sum(values []int, resultChan chan int) {
sum :=0
for _, value := range values {
sum += value
}
resultChan <- sum // 将计算结果发送到channel中
}
func main() {
values := []int{1,2,3,4,5,6,7,9,10}
resultChan := make(chan int, 2) // 缓冲通道
// 启动两个 goroutine 并行计算
go sum(values[:4], resultChan) // [1,2,3,4]
go sum(values[4:], resultChan) // [5,6,7,9,10]
// 等待结果(阻塞直到收到两个结果)
sum1, sum2 := <-resultChan, <-resultChan
fmt.Println("Result:", sum1, sum2, sum1+sum2)
}
执行流程:
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论