技术文摘
Go语言限制并发任务数量且每次最多执行40个任务的方法
2025-01-09 02:21:50 小编
在Go语言的开发过程中,常常会遇到需要限制并发任务数量的场景。比如,在处理大量数据时,如果并发任务过多,可能会导致系统资源耗尽,性能下降。本文将详细介绍如何在Go语言中限制并发任务数量,且每次最多执行40个任务。
我们可以借助Go语言的sync.WaitGroup和sync.Semaphore来实现这一需求。sync.WaitGroup用于等待一组 goroutine 完成,而sync.Semaphore则可以用来控制并发的数量。
以下是一个示例代码:
package main
import (
"fmt"
"sync"
)
func main() {
var wg sync.WaitGroup
semaphore := make(chan struct{}, 40)
tasks := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50}
for _, task := range tasks {
wg.Add(1)
semaphore <- struct{}{}
go func(t int) {
defer wg.Done()
defer func() { <-semaphore }()
// 模拟任务执行
fmt.Printf("Task %d is running\n", t)
}(task)
}
wg.Wait()
fmt.Println("All tasks are completed")
}
在这段代码中,我们首先创建了一个容量为40的semaphore通道。这个通道就像是一个许可证池,每个struct{}{}代表一个许可证。
接着,遍历任务列表,为每个任务添加到wg中,并从semaphore通道获取一个许可证(即发送一个空结构体到通道中)。然后启动一个 goroutine 来执行任务。
在 goroutine 内部,使用defer语句在任务完成时将许可证放回semaphore通道,并标记wg中的任务完成。
最后,通过wg.Wait()等待所有任务完成。
通过这种方式,我们有效地限制了并发任务的数量,确保每次最多只有40个任务同时执行。这种方法不仅能提高系统的稳定性,还能充分利用系统资源,提升整体性能。无论是在数据处理、网络请求还是其他需要并发操作的场景中,都能发挥很好的作用。掌握这一技巧,能让Go语言开发者更好地应对复杂的并发需求。
- 新式勒索病毒感染剧增 安全人员称其主要借色情网站广告位传播
- 开机遇到 0xc000000f 无法进入系统的解决办法
- Windows 窗口移动的键盘快捷键使用方法
- 微软 Windows Terminal 全新设计抢先曝光 全面适配 Win11 风格
- 微软 Windows Sever 2022 发布:可使用 10 年 不再年度更新
- Windows 系统中 Smss.exe 加载 win32k.sys 的详细过程
- KB5012170 系统更新错误 0x800f0922 影响 Win8.1、Win10、Win11 等(附解决办法)
- 修复电脑上 Steam 错误 E502 L3 的方法
- 0x0000000a 蓝屏代码含义及解决方法汇总
- 解决 0x00000024 蓝屏的方法
- Windows 隐藏小工具,攻克 95%蓝屏难题
- Windows Server 20H2 8 月 9 日停止支持,Win10 21H1 12 月结束支持
- Windows Server 2022 Build 20348.859(KB5015879)更新及修改汇总发布
- 电脑双系统删除其一的教程
- Windows 主题下载及获取官方在线主题的途径