golang并发模式揭示-Golang

首页 2024-07-04 01:25:01

golang 并发模式采用以下原语:goroutine(轻量级并发执行单位)、channel(通信通道)、sync.mutex(互斥锁)。实战案例使用这些原语并行执行任务,并使用无缓冲 channel 存储任务结果,使用 sync.mutex 保护并发访问结果,最终收集和打印结果。

Golang 并发模式揭秘

Golang 内置并发原语是一种高并发性、高性能的编程语言,具有很强的并发功能。本文将深入探讨 Golang 并发模式,如何通过实战案例演示有效管理并发。

并发模式

goroutine 是 Golang 轻量级并发执行单元可以并发执行不同的任务。go 用于创造新的关键词 goroutine。

channel 在这里使用的是通信通道 goroutine 数据在两者之间传输。channel 通常没有缓冲或缓冲。

立即学习"go语言免费学习笔记(深入);

sync.Mutex 用于互斥锁,防止并发访问共享数据。

实战案例

以下是一个使用 goroutine 和 channel 并发执行多项任务的示例:

package main

import (
    "fmt"
    "sync"
    "time"
)

func main() {
    // 创造无缓冲 channel,用于存储任务结果
    resultChan := make(chan int)

    // 创建一个 mutex,用于控制对结果的访问
    var mu sync.Mutex

    // 创建并启动 10 个 goroutine 并发执行任务
    for i := 0; i < 10; i   {
        go func(i int) {
            result := i * i
            fmt.Printf("Goroutine %d completed with result %d\n", i, result)

            mu.Lock()
            resultChan <- result
            mu.Unlock()
        }(i)
    }

    // 等待所有 goroutine 完成任务并收集结果
    results := make([]int, 10)
    for i := 0; i < 10; i   {
        results[i] = <-resultChan
    }

    // 打印最终结果
    fmt.Println("Final results:", results)

    time.Sleep(time.Second) // 等待 goroutine 退出
}

在此示例中:

  • 我们创造了一个无缓冲 channel resultChan 存储任务结果。
  • 我们使用 sync.Mutex 保护并发访问结果。
  • 我们创建了 10 个 goroutine,每个 goroutine 计算一个平方,并将其发送到 resultChan。
  • 主 goroutine 等待所有 goroutine 完成任务,收集并打印结果。

示例显示了如何使用它 goroutine 和 channel 并发执行任务,如何保护共享数据,如何等待 goroutine 优雅的退出。通过理解这些概念,你可以有效地管理和构建高性能 Golang 应用程序。

以上是golang并发模式披露的详细内容,请关注其他相关文章!


p