郭佳恩前端工程师
返回首页
10 分钟阅读

Go 语言并发编程:Goroutines 与 Channels

Go 语言的并发模型基于 CSP。了解 Goroutine 和 Channel 如何让并发编程变得简单而高效。

GoBackendConcurrency

Go 语言被设计为一门系统级语言,并发支持是其核心特性之一。

Goroutines

Goroutine 是 Go 运行时管理的轻量级线程。

go
package main

import (
	"fmt"
	"time"
)

func say(s string) {
	for i := 0; i < 5; i++ {
		time.Sleep(100 * time.Millisecond)
		fmt.Println(s)
	}
}

func main() {
	go say("world") // 开启一个新的 Goroutine
	say("hello")    // 在当前 Goroutine 执行
}

Channels

Channel 是 Goroutine 之间通信的管道。

go
package main

import "fmt"

func sum(s []int, c chan int) {
	sum := 0
	for _, v := range s {
		sum += v
	}
	c <- sum // 将和发送到 channel c
}

func main() {
	s := []int{7, 2, 8, -9, 4, 0}

	c := make(chan int)
	go sum(s[:len(s)/2], c)
	go sum(s[len(s)/2:], c)

	x, y := <-c, <-c // 从 channel c 接收

	fmt.Println(x, y, x+y)
}

评论区0

自由讨论你的想法,分享你的实践。

还没有评论

成为第一个发言的人吧