使用 Goroutine 和 Chanel 快速实现并发和排队

本文通过一个模拟10个业务窗口处理12个客户案例,介绍如何使用Goroutine和Channel进行并发控制。每个窗口由单独的Goroutine处理,任务通过jobChannel分发。借助带缓冲的Channel,当所有窗口忙碌时,新任务会等待,窗口空闲时继续执行。这种机制确保了并发执行与排队的有序性。
摘要由CSDN通过智能技术生成

问题:某线下营业厅有 10 个业务办理窗口,每个窗口同一时刻只能接待一位客人。用 Goroutine 模拟同时有 12 个客户需要办理业务的过程。

思路是这样的:一个 Goroutine 负责将这些任务(也就是例子中的客户)分发到 jobChannel 中,另一个 Goroutine 读取 jobChannel,读到任务后检查是否还有执行器(抽象出来的概念,也就是例子中的业务办理窗口)可以执行该任务,有就创建 Goroutine 进行执行,否则等待,当有可用执行器时继续。

这里 “检查是否还有可用执行器”,以及 “有执行器后结束等待” 是比较有技巧性的地方,我们可以使用带缓冲的 Channel 进行实现,每开始执行一个任务就往该 Channel 写一个值,每个任务执行结束时就读走该 Channel 中的一个值。

runningJobChannel := make(chan int, 10)
for job 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值