Go 语言并发编程:Goroutine 与 Channel 实战指南

Go 语言并发编程:Goroutine 与 Channel 实战指南

一、什么是 Goroutine

Goroutine 是 Go 语言中最强大的特性之一,它是一种轻量级的线程,由 Go 运行时管理。与操作系统线程相比,Goroutine 的启动开销极小,内存占用仅约 2KB。

二、Goroutine 基础用法

复制代码
package main

import (
    "fmt"
    "time"
)

func sayHello() {
    fmt.Println("Hello from Goroutine!")
}

func main() {
    go sayHello()
    time.Sleep(time.Second)
    fmt.Println("Main function done")
}

三、Channel 通道通信

Channel 是 Goroutine 之间通信的管道,遵循"不要通过共享内存来通信,而要通过通信来共享内存"的原则。

复制代码
package main

import "fmt"

func worker(ch chan int) {
    for i := 0; i < 5; i++ {
        ch <- i
    }
    close(ch)
}

func main() {
    ch := make(chan int)
    go worker(ch)
    
    for num := range ch {
        fmt.Printf("Received: %d
", num)
    }
}

四、实战:并发处理任务

复制代码
package main

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

func processTask(id int, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Printf("Task %d started
", id)
    time.Sleep(100 * time.Millisecond)
    fmt.Printf("Task %d completed
", id)
}

func main() {
    var wg sync.WaitGroup
    
    for i := 1; i <= 10; i++ {
        wg.Add(1)
        go processTask(i, &wg)
    }
    
    wg.Wait()
    fmt.Println("All tasks completed!")
}

五、最佳实践

  • 避免 Goroutine 泄漏:确保每个 Goroutine 都能正常退出
  • 使用 context 控制生命周期
  • 合理使用 buffered channel
  • 使用 sync.WaitGroup 等待并发任务完成

总结

Go 语言的并发模型简洁而强大,掌握 Goroutine 和 Channel 是编写高效并发程序的关键。

相关推荐
小兔崽子去哪了4 分钟前
深度学习 2 / CNN 神经网络
后端·python
rannn_11119 分钟前
【Java面试八股】Java基础篇|数据类型、面向对象、关键字、反射、注解、异常、新特性、序列化、设计模式、IO
java·后端·面试
用户83562907805128 分钟前
Python 实现 Word 文档域的插入与管理
后端·python
MacroZheng29 分钟前
阿里又开源了一个神级 Skill 项目!
java·人工智能·后端
Ysx1 小时前
Dify Custom Tool 设计模式:一行提示词接入一张新报表
人工智能·后端
小卿噢1 小时前
malloc 成功 ≠ 你有内存:一次把 OOM 从头测到尾
linux·后端
JoyT1 小时前
Spring AI 2.0 进阶入门:Badcase、Eval 与大模型应用效果优化
后端
wei_shuo1 小时前
KES 事务处理深度实践:隔离级别选择、MVCC机制应用与并发冲突解决
后端
旺仔不是程序员1 小时前
复合索引最左前缀原则:PostgreSQL 的 WHERE 为什么必须命中第一列
数据库·后端·sql
旺仔不是程序员1 小时前
字段类型不一致:PostgreSQL 报错与索引失效的第一元凶
数据库·后端·sql