Go语言并发模式:扇出/扇入的实用技巧

简介: Go语言并发模式:扇出/扇入的实用技巧

Go语言并发模式:扇出/扇入的实用技巧

在Go并发编程中,扇出/扇入模式是处理大量任务的利器。今天分享一个实际项目中验证过的实现技巧。

问题场景

假设我们需要并发处理1000个URL,每个URL请求耗时不等,需要控制并发数并收集所有结果。扇出阶段分发任务,扇入阶段聚合结果。

实现方案

func worker(id int, jobs <-chan string, results chan<- string) {
   
    for job := range jobs {
   
        // 模拟耗时操作
        result := fmt.Sprintf("worker %d processed %s", id, job)
        results <- result
    }
}

func fanIn(results ...<-chan string) <-chan string {
   
    var wg sync.WaitGroup
    out := make(chan string)

    output := func(c <-chan string) {
   
        for v := range c {
   
            out <- v
        }
        wg.Done()
    }

    wg.Add(len(results))
    for _, c := range results {
   
        go output(c)
    }

    go func() {
   
        wg.Wait()
        close(out)
    }()
    return out
}

关键技巧

  1. 有界队列:使用带缓冲的channel避免goroutine阻塞
  2. 优雅退出:通过sync.WaitGroup确保所有worker完成后再关闭结果通道
  3. 错误处理:建议在results channel中传递结构体,包含error字段

性能优化

  • 根据CPU核心数设置worker池大小
  • 使用context超时控制避免goroutine泄漏
  • 考虑使用semaphore库实现更精细的并发控制

这个模式在我处理百万级日志分析时表现优异,将处理时间从小时级降至分钟级。掌握扇出/扇入,Go并发编程将如虎添翼。

目录
相关文章
|
1天前
|
人工智能 JSON 机器人
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
本文带你零成本玩转OpenClaw:学生认证白嫖6个月阿里云服务器,手把手配置飞书机器人、接入免费/高性价比AI模型(NVIDIA/通义),并打造微信公众号“全自动分身”——实时抓热榜、AI选题拆解、一键发布草稿,5分钟完成热点→文章全流程!
10096 24
让龙虾成为你的“公众号分身” | 阿里云服务器玩Openclaw
|
13天前
|
人工智能 安全 Linux
【OpenClaw保姆级图文教程】阿里云/本地部署集成模型Ollama/Qwen3.5/百炼 API 步骤流程及避坑指南
2026年,AI代理工具的部署逻辑已从“单一云端依赖”转向“云端+本地双轨模式”。OpenClaw(曾用名Clawdbot)作为开源AI代理框架,既支持对接阿里云百炼等云端免费API,也能通过Ollama部署本地大模型,完美解决两类核心需求:一是担心云端API泄露核心数据的隐私安全诉求;二是频繁调用导致token消耗过高的成本控制需求。
5828 14
|
21天前
|
人工智能 JavaScript Ubuntu
5分钟上手龙虾AI!OpenClaw部署(阿里云+本地)+ 免费多模型配置保姆级教程(MiniMax、Claude、阿里云百炼)
OpenClaw(昵称“龙虾AI”)作为2026年热门的开源个人AI助手,由PSPDFKit创始人Peter Steinberger开发,核心优势在于“真正执行任务”——不仅能聊天互动,还能自动处理邮件、管理日程、订机票、写代码等,且所有数据本地处理,隐私完全可控。它支持接入MiniMax、Claude、GPT等多类大模型,兼容微信、Telegram、飞书等主流聊天工具,搭配100+可扩展技能,成为兼顾实用性与隐私性的AI工具首选。
22755 119

热门文章

最新文章