Go让消费速度更快

简介: Go让消费速度更快

Go让消费速度更快



可复用的生产消费逻辑


有时候我们从接口当中接受一批数据,想要它们在后台运行,或者说同步执行效率更快;有时候从缓存或者队列中消费数据,想要增加消费的速度;有时候跑一批数据,想要处理效率更高;那么遇到这些场景,这一套生产消费模式就足以应对了,来看下代码。


代码


func ConsumeTask(ctx context.Context) {
LOOP:
 var total int
 var success int
 start := time.Now()
 wg := sync.WaitGroup{}
 gLock := sync.Mutex{}
 taskChan := make(chan Task, 50)
 wg.Add(1)
 go func() {
  defer wg.Done()
  for {
   // 获取的长度是0或者错误 直接break
   // 生产 遇到错误continue
   // 反序列化
   total += 1
   taskChan <- task
  }
  // 结束生产
  close(taskChan)
 }()
  // 多个消费者
 for i := 0; i < 50; i++ {
  wg.Add(1)
  go func() {
   defer wg.Done()
   for {
    if task, ok := <-taskChan; ok { // 消费
       // 。。。。。。
       gLock.Lock()
       success += 1
       gLock.Unlock()
     }
    } else {// chan关闭了 就退出消费
     break
    }
   }
  }()
 }
 log.Warn(ctx, fmt.Sprintf("消费中"))
 wg.Wait()
 log.Warn(ctx, fmt.Sprintf("消费结束"))
 if success == 0 || total == 0 {
  log.Warn(ctx, fmt.Sprintf("当前无待消耗的任务, sleep 10s"))
  time.Sleep(10 * time.Second)
  goto LOOP
 }
 larkText := requestcommon.NewLarkCustomBotContentRichText("消费", time.Now().Format("2006-01-02 15:04:05"))
 totalText := fmt.Sprintf("总共待消费:%d", total)
 failText := fmt.Sprintf("失败:%d", total-success)
 successText := fmt.Sprintf("成功: %d", success)
 takeText := fmt.Sprintf("耗时: %v", time.Since(start))
 ipText := fmt.Sprintf("IP: %s", common.LocalIP())
 // 增加各种指标预警
 larkText.AddTextWithTag(totalText).AddTextWithTag(successText).AddTextWithTag(failText).AddTextWithTag(takeText).AddTextWithTag(ipText)
 // 通过飞书hook url 发送出去
 err := requestcommon.SendLarkCustomBotMsgRichText(ctx, "hook_url", *larkText)
 log.Warn(ctx, fmt.Sprintf("飞书发送消费通知 err: %v", err))
 goto LOOP
}


小结


这套模板大家可以拿来直接用,简单高效,欢迎有兴趣的同学一起交流哈。

目录
打赏
0
0
0
0
5
分享
相关文章
申请并部署免费的 SSL/TLS 证书
本文介绍了如何免费获取和部署 SSL/TLS 证书,主要针对囊中羞涩的用户。方法包括:云服务平台的限量提供、使用 Cloudflare 等网络服务商以及直接向免费证书颁发机构(如 Let’s Encrypt 和 ZeroSSL)申请。文章重点讲述了通过自动化脚本 acme.sh 与 Let’s Encrypt 配合申请和部署证书的步骤,包括设置默认 CA、安装 acme.sh、使用 http 模式验证和部署到 nginx 服务器。此外,还提到了配置 nginx.conf 文件以启用 SSL。
692 0
|
6月前
|
弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门
弃用Docker Desktop:在WSL2中玩转Docker之Docker Engine 部署与WSL入门
6666 4
Docker学习重点(2)~docker安装、配置阿里云镜像加速
Docker学习重点(2)~docker安装、配置阿里云镜像加速
556 0
使用paho的MQTT时遇到的重连导致订阅无法收到问题和解决
  最近在使用MQTT来实现消息的传输,网上demo很多,这里就不在重复介绍了,直接上代码,百度就能出现一大堆   下面是MQTT实现订阅的主要代码部分    MqttClient client = new MqttClient(HOST, clientid, new MemoryPersiste...
15093 0
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
仅用3分钟,百炼调用满血版Deepseek-r1 API,享受百万免费Token。阿里云提供零门槛、快速部署的解决方案,支持云控制台和Cloud Shell两种方式,操作简便。Deepseek-r1满血版在推理能力上表现出色,尤其擅长数学、代码和自然语言处理任务,使用过程中无卡顿,体验丝滑。结合Chatbox工具,用户可轻松掌控模型,提升工作效率。阿里云大模型服务平台百炼不仅速度快,还确保数据安全,值得信赖。
157353 24
深度评测 | 仅用3分钟,百炼调用满血版 Deepseek-r1 API,百万Token免费用,简直不要太爽。
用DeepSeek,就在阿里云!四种方式助您快速使用 DeepSeek-R1 满血版!更有内部实战指导!
DeepSeek自发布以来,凭借卓越的技术性能和开源策略迅速吸引了全球关注。DeepSeek-R1作为系列中的佼佼者,在多个基准测试中超越现有顶尖模型,展现了强大的推理能力。然而,由于其爆火及受到黑客攻击,官网使用受限,影响用户体验。为解决这一问题,阿里云提供了多种解决方案。
16987 37
PAI Model Gallery 支持云上一键部署 DeepSeek-V3、DeepSeek-R1 系列模型
DeepSeek 系列模型以其卓越性能在全球范围内备受瞩目,多次评测中表现优异,性能接近甚至超越国际顶尖闭源模型(如OpenAI的GPT-4、Claude-3.5-Sonnet等)。企业用户和开发者可使用 PAI 平台一键部署 DeepSeek 系列模型,实现 DeepSeek 系列模型与现有业务的高效融合。
本地部署DeepSeek模型
要在本地部署DeepSeek模型,需准备Linux(推荐Ubuntu 20.04+)或兼容的Windows/macOS环境,配备NVIDIA GPU(建议RTX 3060+)。安装Python 3.8+、PyTorch/TensorFlow等依赖,并通过官方渠道下载模型文件。配置模型后,编写推理脚本进行测试,可选使用FastAPI服务化部署或Docker容器化。注意资源监控和许可协议。
1310 8

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等