首页 > 其他分享 >Go批量读取channel的数据

Go批量读取channel的数据

时间:2024-10-25 13:49:55浏览次数:5  
标签:读取 fmt batch timer Go flushInterval batchSize channel

package main

import (
        "fmt"
        "time"
)

func batchProcessor(ch <-chan string, batchSize int, flushInterval time.Duration) {
        var batch []string
        timer := time.NewTimer(flushInterval)

        for {
                select {
                case data := <-ch:
                        batch = append(batch, data)
                        // 当缓冲区达到批量大小时处理
                        if len(batch) >= batchSize {
                                fmt.Printf("Processing batch: %v\n", batch)
                                batch = nil
                                // 重置定时器
                                timer.Reset(flushInterval)
                        }

                case <-timer.C:
                        // 如果达到时间间隔,但 batch 不为空,也进行处理
                        if len(batch) > 0 {
                                fmt.Printf("Processing batch on timer: %v\n", batch)
                                batch = nil
                        }
                        // 重置定时器
                        timer.Reset(flushInterval)
                }
        }
}

func main() {
        dataChannel := make(chan string)
        batchSize := 5
        flushInterval := 3 * time.Second

        // 启动批量处理协程
        go batchProcessor(dataChannel, batchSize, flushInterval)

        // 模拟向 channel 发送数据
        for i := 1; i <= 10; i++ {
                dataChannel <- fmt.Sprintf("data-%d", i)
                time.Sleep(1 * time.Second)
        }

        // 让主程序暂停一会,以便查看处理结果
        time.Sleep(5 * time.Second)
}

标签:读取,fmt,batch,timer,Go,flushInterval,batchSize,channel
From: https://www.cnblogs.com/qcy-blog/p/18502354

相关文章

  • (开题报告)django+vue医疗设备管理系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在医疗领域,设备管理至关重要。关于医疗设备管理系统的研究,现有研究主要以传统的管理模式为主,专门针对基于django+vue技术构建的医疗设备管......
  • Go语言的版本历史和未来趋势
    ###Go语言的版本历史和未来趋势在探讨Go语言的版本历史和未来趋势时,我们可以明确地看到其发展轨迹是由初始发布、持续改进、以及对未来的规划组成的。Go语言,自2009年推出以来,已经经历了多个版本的更新,每次更新都旨在提升性能、增加新功能、改进语言特性和提高安全性。特别是在......
  • Go语言的移动开发能力和工具
    ###Go语言的移动开发能力和工具在探讨Go语言的移动开发能力和工具时,可以明确地说,Go语言支持移动开发,并提供了一系列工具和库来支持这一过程。Go的移动开发能力主要体现在其对Android和iOS平台的应用开发支持、提供的gomobile工具、以及对跨平台开发的支持。特别地,gomobile工具......
  • golang slice相关常见的性能优化手段
    介绍一些开发中常用的slice关联的性能优化手段。鉴于golang编译器本身捉鸡的优化能力,优化的成本就得分摊在开发者自己的头上了。这篇文章会介绍的优化手段是下面这几样:创建slice时预分配内存操作slice前预分配内存slice表达式中合理设置cap值添加多个零值元素的优化循环展......
  • (开题报告)django+vue基于Web的网上书店销售系统论文+源码
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景在当今数字化时代,电子商务蓬勃发展,网上书店作为其中的重要组成部分,具有广阔的市场前景。关于Web网上书店销售系统的研究,现有研究主要以大......
  • HCI_LE_Read_Advertising_Channel_Tx_Power(0x0007)命令全面解析
    目录一、命令概述二、命令格式2.1.HCI_LE_Read_Advertising_Channel_Tx_Power命令一般格式2.2.示例格式2.2.1.命令示例2.2.2.响应示例 三、返回参数说明3.1.状态码(Status)3.2.传输功率等级(Advertising_Channel_Tx_Power_Level)四、命令执行流程4.1.命令准备......
  • gorm.io/sharding改造:赋能单表,灵活支持多分表策略(下)
    背景 分表组件改造的背景,我在这篇文章《gorm.io/sharding改造:赋能单表,灵活支持多分表策略(上)》中已经做了详细的介绍——这个组件不支持单表多个分表策略,为了突破这个限制做的改造。在上一篇文章中,我们讨论了注册的改造,注册的改造修改逻辑比较简单,但是,上一篇文章中遗留了一......
  • go esWebClient基于泛型的通用ES客户端eswebrequest封装
    go1.20自动完成结构体转换。测试用例packageeswebrequestimport("fmt""git.ichub.com/general/webcli120/goconfig/ichubconfig""git.ichub.com/general/webcli120/goconfig/ichublog/golog""git.ichub.com/general/webcli12......
  • 网站模板修改上传图片?模板如何修改网站logo?
    确定图片上传的位置确定在网站的哪个部分需要添加图片上传功能,例如用户资料页面、产品详情页等。HTML表单设置在需要上传图片的地方添加一个表单,使用 <form> 标签,并确保 enctype 属性设置为 multipart/form-data,这允许文件数据被正确编码。<formaction="/up......
  • Hero Age v5.6.10 MOD APK (Menu/One Hit, God Mode)
    HeroAgev5.6.10MODAPK(Menu/OneHit,GodMode)October18,2024(42secondsago)HeroAgeModAPKisasimpleandfun-filledofflinerole-playinggame.Youwillfighttheenemiesandbecomethestrongestheroamongthoseplayers. AppNameHeroA......