Go并发编程:goroutine与channel实战

简介: Go并发编程:goroutine与channel实战

Go并发编程:goroutine与channel实战

Go语言最令人称道的特性莫过于其原生的并发支持。今天我们来探讨两个核心概念:goroutine和channel,它们共同构成了Go高效的并发模型。

轻量级线程:goroutine

与传统线程相比,goroutine更加轻量,创建成本极低。只需在函数调用前加上go关键字,即可启动一个并发执行单元:

go func() {
   
    fmt.Println("我在并发执行!")
}()

安全的通信:channel

goroutine之间通过channel进行通信,遵循“不要通过共享内存来通信,而要通过通信来共享内存”的理念:

ch := make(chan int, 10) // 创建缓冲大小为10的channel

// 发送数据
ch <- 42

// 接收数据
value := <-ch

实战示例:并发爬虫

下面是一个简单的并发爬虫示例,展示如何协调多个goroutine:

func worker(urls <-chan string, results chan<- string) {
   
    for url := range urls {
   
        // 模拟抓取逻辑
        results <- fmt.Sprintf("抓取完成: %s", url)
    }
}

func main() {
   
    urls := make(chan string, 100)
    results := make(chan string, 100)

    // 启动3个worker
    for i := 0; i < 3; i++ {
   
        go worker(urls, results)
    }

    // 发送任务
    go func() {
   
        for _, url := range urlList {
   
            urls <- url
        }
        close(urls)
    }()

    // 收集结果
    for i := 0; i < len(urlList); i++ {
   
        fmt.Println(<-results)
    }
}

最佳实践

  1. 合理设置channel缓冲大小,平衡内存与性能
  2. 始终确保channel被正确关闭,避免goroutine泄露
  3. 使用select语句处理多个channel操作
  4. 考虑使用context包实现超时和取消机制

Go的并发模型简洁而强大,正确使用goroutine和channel,可以轻松构建高性能的并发应用,同时保持代码的清晰可维护。这正是Go在云原生时代备受青睐的原因之一。

相关文章
|
17天前
|
SQL 人工智能 分布式计算
从工单、文档到结构化知识库:一套可复用的 Agent 知识采集方案
我们构建了一套“自动提取 → 智能泛化 → 增量更新 → 向量化同步”的全链路自动化 pipeline,将 Agent 知识库建设中的收集、提质与维护难题转化为简单易用的 Python 工具,让知识高效、持续、低门槛地赋能智能体。
211 39
|
7天前
|
安全 搜索推荐 测试技术
从零理解渗透测试:黑客技术的“方法论”
从零理解渗透测试:黑客技术的“方法论”
221 134
|
7天前
|
SQL 安全 数据库
SQL注入:从登录框到数据泄露的十分钟
SQL注入:从登录框到数据泄露的十分钟
192 140
|
5天前
|
人工智能 机器人 测试技术
用提示工程让大模型自己检查自己:CoVe方法有效减少幻觉
Chain-of-Verification(CoVe)通过“起草-验证-修复”四步流程,让大模型自我纠错幻觉。关键在于隔离验证:隐去初稿,迫使模型独立核查事实,避免自我强化错误。适用于模型应知但易错的场景,与RAG互补。虽增加延迟与成本,却为高可靠性任务提供保障,是迈向“系统2思维”的重要一步。
115 33
用提示工程让大模型自己检查自己:CoVe方法有效减少幻觉
|
7天前
|
安全 网络安全
端口扫描:黑客的“敲门”艺术
端口扫描:黑客的“敲门”艺术
211 135
|
7天前
|
SQL 安全 数据库
从零理解SQL注入:原理、案例与防御
从零理解SQL注入:原理、案例与防御
240 139
|
10天前
|
数据采集 人工智能 IDE
告别碎片化日志:一套方案采集所有主流 AI 编程工具
本文介绍了一套基于MCP架构的轻量化、多AI工具代码采集方案,支持CLI、IDE等多类工具,实现用户无感、可扩展的数据采集,已对接Aone日志平台,助力AI代码采纳率分析与研发效能提升。
280 33
告别碎片化日志:一套方案采集所有主流 AI 编程工具
|
20天前
|
API C++ 开发者
Python 3.12新特性:模式匹配的进阶用法
Python 3.12新特性:模式匹配的进阶用法
187 97
|
10天前
|
存储 缓存 数据建模
StarRocks + Paimon: 构建 Lakehouse Native 数据引擎
12月10日,Streaming Lakehouse Meetup Online EP.2重磅回归,聚焦StarRocks与Apache Paimon深度集成,探讨Lakehouse Native数据引擎的构建。活动涵盖架构统一、多源联邦分析、性能优化及可观测性提升,助力企业打造高效实时湖仓一体平台。
178 32
|
10天前
|
人工智能 运维 监控
进阶指南:BrowserUse + AgentRun Sandbox 最佳实践
本文将深入讲解 BrowserUse 框架集成、提供类 Manus Agent 的代码示例、Sandbox 高级生命周期管理、性能优化与生产部署策略。涵盖连接池设计、安全控制、可观测性建设及成本优化方案,助力构建高效、稳定、可扩展的 AI 浏览器自动化系统。
246 27

热门文章

最新文章