在 CentOS 系统下,Golang 的并发模型主要依赖于 goroutines 和 channels。这种模型使得 Go 语言在处理并发任务时非常高效且易于理解。下面我们来详细了解一下这两个核心概念。
go 来创建一个新的 goroutine,例如:go myFunction()
这将在一个新的 goroutine 中异步执行 myFunction 函数。
创建一个 channel 的示例:
ch := make(chan int) // 创建一个无缓冲的 int 类型 channel
使用 channel 的示例:
// 发送数据到 channel
ch <- 42
// 从 channel 接收数据
value := <-ch
结合 goroutines 和 channels,你可以轻松地实现并发任务的处理和数据传递。以下是一个简单的示例,展示了如何使用 goroutines 和 channels 计算一组数字的和:
package main
import (
"fmt"
"sync"
)
func main() {
numbers := []int{1, 2, 3, 4, 5}
sum := 0
var wg sync.WaitGroup
for _, num := range numbers {
wg.Add(1) // 增加 WaitGroup 的计数器
go func(n int) {
defer wg.Done() // 在 goroutine 完成时减少计数器
sum += n
}(num)
}
wg.Wait() // 等待所有 goroutines 完成
fmt.Println("Sum:", sum)
}
在这个示例中,我们使用了 sync.WaitGroup 来确保所有 goroutines 都完成计算后再输出结果。这样可以避免在所有 goroutines 完成之前就输出不正确的结果。
总之,Golang 的并发模型通过 goroutines 和 channels 提供了一种简单、高效的方式来处理并发任务。在 CentOS 系统下,你可以使用这种模型来充分利用多核处理器的性能,提高程序的执行效率。