租用问题

质量为本、客户为根、勇于拼搏、务实创新

< 返回租用问题列表

Golang中的任务并发执行和Go WaitGroup,golang worker

发布时间:2023-10-09 08:08:27

Golang中的任务并发履行和Go WaitGroup

在Golang中,任务的并发履行可以通过goroutine和channel来实现。Goroutine是轻量级的线程,可以并发履行多个任务。Channel用于在区分的goroutine之间进行通讯和数据传递。
首先,我们可使用go关键字启动一个goroutine来并发履行一个函数。例如:

func main() {
go myFunc()  // 启动一个goroutine并发履行myFunc函数
// 其他的代码
}
func myFunc() {
// 履行任务的逻辑
}

如果我们有多个任务需要并发履行,但是又需要等待它们全部完成后再继续履行后续的代码,可使用sync.WaitGroup来实现。WaitGroup是一个计数器,用于等待一组goroutine的完成。

import "sync"
func main() {
var wg sync.WaitGroup
wg.Add(2)  // 设置需要等待的goroutine数量
go myFunc1(&wg)  // 启动goroutine并发履行myFunc1函数
go myFunc2(&wg)  // 启动goroutine并发履行myFunc2函数
wg.Wait()  // 等待所有goroutine完成
// 所有任务完成后继续履行后续的代码
}
func myFunc1(wg *sync.WaitGroup) {
defer wg.Done()  // 任务完成时通知WaitGroup计数器减1
// 履行任务1的逻辑
}
func myFunc2(wg *sync.WaitGroup) {
defer wg.Done()  // 任务完成时通知WaitGroup计数器减1
// 履行任务2的逻辑
}

在每一个任务的最后,我们使用defer关键字来调用wg.Done(),通知WaitGroup计数器减1。当计数器归零时,Wait方法就会返回,程序继续履行后续的代码。
通过使用goroutine和WaitGroup,我们可以实现任务的并发履行和等待。这样可以充分利用多核处理器的并行计算能力,提高程序的履行效力。