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
MySQL连接就这么简单!本地远程、编程语言连接方法一网打尽
还在为MySQL日期计算头疼?这份加一天操作指南能解决90%问题
MySQL日志到底在哪里?Linux/Windows/macOS全平台查找方法在此
MySQL数据库管理工具全景评测:从Workbench到DBeaver的技术选型指南
MySQL密码忘了怎么办?这份重置指南能救急,Windows/Linux/Mac都适用
你的MySQL为什么经常卡死?可能是锁表在作怪!快速排查方法在此
MySQL单表卡爆怎么办?从策略到实战,一文掌握「分表」救命技巧
清空MySQL数据表千万别用错!DELETE和TRUNCATE这个区别可能导致重大事故
你的MySQL中文排序一团糟?记住这几点,轻松实现准确拼音排序!
别再混淆Hive和MySQL了!读懂它们的天壤之别,才算摸到大数据的门道