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在云原生时代备受青睐的原因之一。

相关文章
|
4天前
|
Java 应用服务中间件 Shell
Apache Tomcat 历史版本下载地址 官网地址
本指南详解Tomcat (以7.0.67为例)的完整部署流程:从官网下载历史版本、解压安装,到启动/停止服务(startup.sh/shutdown.sh),再到配置开机自启(systemctl)。涵盖目录结构说明及端口验证方法,适合Linux服务器快速部署。
177 134
|
4天前
|
人工智能 运维 自然语言处理
说话就能让AI写出顶级代码?Vercel官方经验包来了
## 先说前提:这个干嘛的 用大白话说:Vercel是全球最大的网页托管平台。 你知道GitHub吗?全球最大的代码托管平台。 Vercel就是网页版的GitHub,全世界数百万网站都用它托管。 服务过哪些大牌? 有字节跳动、Adobe、IBM这些巨头。 现在Vercel把内部多年积累的开发经验,打包成了一个 经验包。 你不用学技术,不用背规则,甚至不用看文档。 只要正常跟AI说话,AI就会
218 131
|
2天前
|
安全 数据库连接 数据库
掌握Python上下文管理器:优雅资源管理的艺术
掌握Python上下文管理器:优雅资源管理的艺术
192 155
|
28天前
|
SQL 安全 数据库
SQL注入:从登录框到数据泄露的十分钟
SQL注入:从登录框到数据泄露的十分钟
216 140
|
21天前
|
Cloud Native Go 开发者
为什么 Go 成为云原生时代的首选语言?
为什么 Go 成为云原生时代的首选语言?
202 138
|
6天前
|
Python
用Python装饰器优雅地为函数计时
用Python装饰器优雅地为函数计时
174 140
|
23天前
|
机器学习/深度学习 人工智能 自然语言处理
超越规则:AI模型如何学会“思考”?
超越规则:AI模型如何学会“思考”?
210 142
|
21天前
|
安全 Go API
轻量并发实战:用Go的goroutine与channel优化任务处理
轻量并发实战:用Go的goroutine与channel优化任务处理
214 139
|
21天前
|
安全 Go
Go并发模式:用goroutine和channel实现高效管道
Go并发模式:用goroutine和channel实现高效管道
128 86
|
6天前
|
监控 测试技术 Python
优雅的Python装饰器:让代码更简洁高效
优雅的Python装饰器:让代码更简洁高效
194 137