Golang并发编程:使用Go WaitGroup实现任务调度器
引言
在Golang中,实现并发编程可以大大提升程序的性能和效率。而任务调度器是并发编程中非常重要的一部分,它可以用于调度并发任务的执行顺序和同步任务的完成。本文将介绍如何使用Golang中的WaitGroup来实现一个简单的任务调度器,并给出具体的代码示例。WaitGroup简介
WaitGroup是Golang包sync中的一个重要类型,它提供了并发任务的同步和等待功能。WaitGroup有三个主要的方法:Add、Done和Wait。Add(n int):添加 n 个并发任务到WaitGroup中。Done():标记一个任务完成。Wait():等待所有任务完成,并阻塞当前的goroutine。
WaitGroup内部维护了一个计数器,用来记录未完成的任务数量。当调用Add方法时,计数器加上指定的值;当调用Done方法时,计数器减1;当调用Wait方法时,如果计数器大于0,当前goroutine会被阻塞,直到计数器归零。
任务调度器实现
下面是一个使用WaitGroup实现任务调度器的示例代码:
package mainimport ( "fmt" "sync" "time")func worker(id int, wg *sync.WaitGroup) { defer wg.Done() fmt.Printf("Worker %d starting", id) time.Sleep(time.Second) fmt.Printf("Worker %d done", id)}func main() { var wg sync.WaitGroup for i := 1; i在这个示例中,我们使用一个for循环启动5个worker goroutine,并通过调用wg.Add(1)来将任务数量添加到WaitGroup中。在worker函数中,使用defer关键字来确保在函数返回前调用wg.Done(),来减少计数器的值。最后,使用wg.Wait()来等待所有任务完成。
- 运行结果
运行这个示例代码,你会看到如下的输出结果:Worker 1 startingWorker 2 startingWorker 3 startingWorker 4 startingWorker 5 startingWorker 3 doneWorker 1 doneWorker 2 doneWorker 5 doneWorker 4 doneAll workers done登录后复制
可以看到,所有的worker goroutine被并发执行,但是输出的顺序并不一定是按照启动顺序来的,这是因为goroutine的调度是由Go运行时进行的。
立即学习“go语言免费学习笔记(深入)”;
总结
使用WaitGroup可以方便地实现并发任务的调度和同步。通过调用Add方法添加任务数量、调用Done方法标记任务完成、调用Wait方法来等待任务完成,可以实现任务的同步和顺序控制。在实际应用中,任务调度器可以用于处理并发任务、限制并发数量等场景,帮助我们更好地利用Golang的并发能力。通过本文的介绍和示例代码,相信你对如何使用Golang的WaitGroup实现任务调度器有了更深的理解。希望本文对你学习和使用Golang的并发编程有所帮助!
以上就是Golang并发编程:使用Go WaitGroup实现任务调度器的详细内容,更多请关注【创想鸟】其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。
发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2369011.html