HI,欢迎来到我爱模板网!

Golang协程与 channel 的配合

协程与 channel 的配合可实现并发编程,提升程序性能和吞吐量,通过 channel,协程可以安全高效地通信和交换数据,主要步骤如下:创建 channel 接收任务。启动多个协程从 channel 接收并处理任务。在主线程创建任务并发送到 channel。关闭 channel 告知协程没有更多任务。使用 sync.waitgroup 等待所有协程完成。

Golang协程与 channel 的配合

Golang 协程与 Channel 的配合

简介

协程是一种用户态轻量级线程,与进程或线程相比,协程的创建和销毁消耗更少的资源。Channel 是 Go 语言中用于 goroutine 之间进行通信的一种机制。协程和 channel 的结合可以实现并发编程,从而提高程序的性能和吞吐量。

实战案例

让我们通过一个实战案例来展示协程与 channel 的配合。此案例将展示如何并行处理一组任务。

// 任务定义
type Task struct {
    ID   int
    Data []int
}

// 任务处理函数
func processTask(task *Task) {
    // 耗时处理
    fmt.Printf("Processing task %d\\n", task.ID)
    time.Sleep(time.Second * 2)
}

func main() {
    // 创建一个 channel 用于接收任务
    tasks := make(chan *Task, 10)

    // 启动 4 个协程来处理任务
    for i := 0; i < 4; i++ {
        go func() {
            for {
                // 从 channel 中接收任务
                task := <-tasks

                // 处理任务
                processTask(task)
            }
        }()
    }

    // 创建任务并将其发送到 channel
    for i := 0; i < 10; i++ {
        task := &Task{
            ID:   i,
            Data: []int{i, i + 1, i + 2},
        }
        tasks <- task
    }

    // 关闭 channel 告知协程没有更多任务
    close(tasks)

    // 等待所有协程完成
    var wg sync.WaitGroup
    wg.Add(4)
    for i := 0; i < 4; i++ {
        go func() {
            // 协程退出时通知WaitGroup
            wg.Done()
        }()
    }
    wg.Wait()
}

给TA打赏
共{{data.count}}人
人已打赏
后端开发

C++ 函数如何实现最优执行时间?

2024-4-28 9:36:38

后端开发

C++ lambda 表达式如何定义和使用?

2024-4-28 9:38:41

【腾讯云】11.11云上盛惠!云服务器首年1.8折起,买1年送3个月!
11.11云上盛惠!海量产品·轻松上云!云服务器首年1.8折起,买1年送3个月!超值优惠,性能稳定,让您的云端之旅更加畅享。
查看更多相关信息>>
站长

(工作日 10:00 - 22:30 为您服务)

2026-01-29 23:41:07

您好,无论是售前、售后、意见建议……均可通过联系工单与我们取得联系。

猜你想问:

  • 购买的模板免费包安装吗?

  • 这个演示地址有吗?

  • 购买vip会员可以下载哪些模板?

您的留言我们已经收到,我们将会尽快跟您联系!
取消
立即选择任一渠道联系我们