当前位置: 首页 > news >正文

go语言并发读写数据队列,不停写的同时,一次最多读取指定量数据(逐行注释)

1、数据队列可以存储任意类型的一个数据(下程序是添加整数值)。

数据队列代码点这里查看《go语言结构体实现数据结构队列(先进先出)存储数据(逐行注释)》

2、读写操作并发进行(下程序向队列中逐个写入100个数据项)。

3、读取的时候,有最大读取量(下列程序一次最多读取5个数据项),读取数据后,相应的数据项从队列中删除。

4、添加数据完毕、并且队列无数据后,退出程序。

package mainimport ("fmt""sync""time"
)var wq = NewWorkQueue()               // 数据队列
var fz = false                        // 添加任务完毕后,设置为true
var wgroup = sync.WaitGroup{}         // 用于同步等待协程完成
var readMax = 5                       // 一次最多获取数据量
var ch = make(chan struct{}, readMax) // 控制获取数据量func main() {wgroup.Add(1) // 添加数据协程+1go A()        // 动态添加数据B()           // 动态获取数据wgroup.Wait() // 等待协程完成
}// 动态添加数据
func A() {for i := 1; i <= 100; i++ {wq.Add(i)                          // 队列添加数据time.Sleep(100 * time.Millisecond) // 模拟添加需要时间}fz = true     // 添加数据完成,告知数据获取协程wgroup.Done() // 添加数据完成
}// 动态获取数据
func B() {for {if fz && wq.Size() == 0 { // 添加数据已完成,并且数据链长度为0return // 退出获取数据操作} // 添加数据已完成,并且队列为空时,退出获取数据if wq.Size() > 0 { // 数据链上有数据节点go func() {defer wgroup.Done() // 完成后,协程计数-1wgroup.Add(1)       // 协程计数+1,防止退出data := wq.Pop()    // 从数据队列取出一个数据if data != nil {    // 数据存在时(因判断队列长度到取出数据过程中可能有其他协程取走数据,导致获取到空值)// 从数据队列获取数据,通过信号量控制并发数量ch <- struct{}{} // 获取信号量,占用一个并发资源,满时等待任务释放后继续执行wgroup.Add(1)    // 协程计数+1,防止退出go func(data interface{}) {defer func() {<-ch          // 任务完成释放信号量,归还并发资源wgroup.Done() // 完成后,协程计数-1}()time.Sleep(2 * time.Second) // 模拟获取数据后处理数据时间fmt.Print(data)             // 数据使用完成}(data)}}()}}
}

相关文章:

go语言并发读写数据队列,不停写的同时,一次最多读取指定量数据(逐行注释)

1、数据队列可以存储任意类型的一个数据&#xff08;下程序是添加整数值&#xff09;。 数据队列代码点这里查看《go语言结构体实现数据结构队列&#xff08;先进先出&#xff09;存储数据&#xff08;逐行注释&#xff09;》 2、读写操作并发进行&#xff08;下程序向队列中…...

密码学——密码学概述、分类、加密技术(山东省大数据职称考试)

大数据分析应用-初级 第一部分 基础知识 一、大数据法律法规、政策文件、相关标准 二、计算机基础知识 三、信息化基础知识 四、密码学 五、大数据安全 六、数据库系统 七、数据仓库. 第二部分 专业知识 一、大数据技术与应用 二、大数据分析模型 三、数据科学 密码学 大数据…...

【数据库MySQL篇二】MySQL数据库入门基础教程:一网打尽数据库和表各种操作、命令和语法

一、MySQL创建数据库 使用Create命令创建数据库 我们可以在登陆 MySQL 服务后&#xff0c;使用 create 命令创建数据库&#xff0c;语法如下: CREATE DATABASE 数据库名; 以下命令简单的演示了创建数据库的过程&#xff0c;数据名为 RUNOOB: [roothost]# mysql -u root -p…...

Android 解决“Could not resolve all artifacts for configuration ‘:classpath‘方法

前些天发现了一个蛮有意思的人工智能学习网站,8个字形容一下"通俗易懂&#xff0c;风趣幽默"&#xff0c;感觉非常有意思,忍不住分享一下给大家。 &#x1f449;点击跳转到教程 报错背景&#xff0c;公司的项目&#xff0c;长时间没有打开&#xff0c;时隔半年再次打…...

青少年编程与数学 02-004 Go语言Web编程 08课题、使用Gin框架

青少年编程与数学 02-004 Go语言Web编程 08课题、使用Gin框架 一、Gin框架二、接收和处理请求三、应用示例 课题摘要:本文介绍了Gin框架的特点、如何接收和处理请求以及一个应用示例。Gin是一个高性能、轻量级的Go语言Web框架&#xff0c;以其快速、极简设计、强大的路由和中间…...

PostgreSQL: 事务年龄

排查 在 PostgreSQL 数据库中&#xff0c;事务年龄&#xff08;也称为事务 ID 年龄&#xff09;是一个重要的监控指标&#xff0c;因为 PostgreSQL 使用事务 ID&#xff08;XID&#xff09;来保持事务的隔离性。每个事务都会被分配一个唯一的事务 ID&#xff0c;这个 ID 随着每…...

C# 识别二维码

文章目录 一. 二维码识别技术概述二 维码识别的步骤图像预处理二维码的定位和检测二维码解码 三 常用的二维码识别库1. OpenCV2. ZXing.Net 一. 二维码识别技术概述 二维码是一种通过黑白矩阵排列来编码数据的图形符号&#xff0c;它的编码方式具有较强的容错性&#xff0c;可以…...

KeepAlive与RouterView缓存

参考 vue动态组件&#xff1c;Component&#xff1e;与&#xff1c;KeepAlive&#xff1e; KeepAlive官网介绍 缓存之keep-alive的理解和应用 Vue3Vite KeepAlive页面缓存问题 vue多级菜单(路由)导致缓存(keep-alive)失效 vue3 router-view keeperalive对于同一路径但路径…...

RK3588 , mpp硬编码rgb, 保存MP4视频文件.

RK3588 , mpp硬编码yuv, 保存MP4视频文件. ⚡️ 传送 ➡️ RK3588, FFmpeg 拉流 RTSP, mpp 硬解码转RGBRk3588 FFmpeg 拉流 RTSP, 硬解码转RGBUbuntu x64 架构, 交叉编译aarch64 FFmpeg mppCode Init MppMPP_RET init_mpp...

使用 Wireshark 和 Lua 脚本解析通讯报文

在复杂的网络环境中&#xff0c;Wireshark 凭借其强大的捕获和显示功能&#xff0c;成为协议分析不可或缺的工具。然而&#xff0c;面对众多未被内置支持的协议或需要扩展解析的场景&#xff0c;Lua 脚本的引入为Wireshark 提供了极大的灵活性和可扩展性。本文将详细介绍如何使…...

ElasticSearch08-分析器详解

零、文章目录 ElasticSearch08-分析器详解 1、分析器原理 Elasticsearch的分词器&#xff08;Analyzer&#xff09;是全文搜索的核心组件&#xff0c;它负责将文本转换为一系列单词&#xff08;term/token&#xff09;的过程&#xff0c;也叫分词。 &#xff08;1&#xff…...

【IN、NOT、AND、OR】在 MySql 中的使用方法,使用场景、注意事项

目录 IN NOT AND OR 注意事项&#xff1a; 使用场景&#xff1a; IN 用于指定某个字段的值在一个预定义的列表中。 SELECT * FROM users WHERE age IN (20, 25, 30);查询返回 age 字段 是20、25 、30 的用户记录。 NOT 用于对条件进行否定。 查询将返回与指定 条件相…...

Face to face

1.西班牙添加5G volte 首先carrierconfig里使能 <boolean name"carrier_nr_available_bool" value"true" /> <boolean name"carrier_volte_available_bool" value"true" /> 其次 组件apn配置ims参数 2.印度j…...

宝塔配置python项目提示python版本与安装的不符

用宝塔的网站添加了项目&#xff0c;配置选择了python3.8&#xff0c;但是在终端并且进入了虚拟环境查看python的版本居然还是默认是2.7.5版本。 官方是举列说明&#xff0c;这张图是用python管理器生成的 而我用的 网站--python项目&#xff0c; 那么虚拟路径在 /www/serve…...

Restaurants WebAPI(一)—— clean architecture

文章目录 项目地址一、Restaurants.Domain 核心业务层1.1 Entities实体层1.2 Repositories 数据操作EF的接口二、Restaurants.Infrastructure 基础设施层2.1 Persistence 数据EF CORE配置2.2 Repositories 数据查询实现2.3 Extensions 服务注册三、Restaurants.Application用例…...

c++数据结构算法复习基础--13--基数算法

基数排序 - 桶排序 时间复杂度 O(n*d) – d为数据的长度 每次比较一位&#xff08;个位、十位。。。&#xff09;&#xff0c;所以取值范围就为0-9。 根据该特点&#xff0c;设计桶的概念 – 0号桶、1号桶… 1、思想 1&#xff09;找出最长的数字&#xff0c;确定要处理的…...

ntp设置

NTP&#xff08;Network Time Protocol&#xff09;简介 ntp授时定义 - NTP是一种用于在计算机网络中同步时间的协议。它确保网络中的各个设备&#xff08;如服务器、客户端计算机、网络设备等&#xff09;的时钟保持准确一致。 - 其工作原理是通过分层的时钟源体系&#xff…...

如何在Java中使用封装好的API接口?

1.选择合适的 HTTP 库 在 Java 中&#xff0c;可以使用多种库来进行 HTTP 请求。java.net.HttpURLConnection是 Java 标准库中的类&#xff0c;能够满足基本的 HTTP 请求需求&#xff0c;但使用起来相对复杂。另外&#xff0c;还有一些第三方库&#xff0c;如OkHttp和Apache H…...

AWS EKS 相关错误修复 - remote error: tls: internal error - CSR pending

现象 升级aws eks的kubernetes版本后执行kubectl logs 或者kubectl exec相关命令会出现报错 remote error: tls: internal error 执行kubectl get csr -A查看csr出现一直pending的状态,并且出现问题的pod都在新创建出来的eks node节点上 kubectl get csr -A NAME AGE …...

浏览器事件循环机制

JavaScript 是单线程运行的语言&#xff0c;同一时间只能执行一个任务。单线程意味着&#xff1a; 如果某个任务执行时间过长&#xff0c;后续任务会被阻塞。 同步任务和异步任务的调度需要一种机制来管理。 为了解决这个问题&#xff0c;事件循环应运而生&#xff0c;它可以…...

Netgear路由器终极救援指南:如何用免费开源工具nmrpflash快速修复“变砖“设备

Netgear路由器终极救援指南&#xff1a;如何用免费开源工具nmrpflash快速修复"变砖"设备 【免费下载链接】nmrpflash Netgear Unbrick Utility 项目地址: https://gitcode.com/gh_mirrors/nmr/nmrpflash 当你的Netgear路由器因固件升级失败、意外断电或系统崩…...

芯片老化座的工作温度范围?

在芯片测试领域&#xff0c;老化座&#xff08;Burn-in Socket&#xff09;是保障半导体器件长期可靠性的关键设备。它不仅要在极端温度下稳定工作&#xff0c;还要确保测试数据的精准度。今天&#xff0c;我们以HMILU&#xff08;深圳市鸿怡电子有限公司&#xff09;为例&…...

实战指南:用UABEA高效解析Unity资源结构的5个关键要点

实战指南&#xff1a;用UABEA高效解析Unity资源结构的5个关键要点 【免费下载链接】UABEA c# uabe for newer versions of unity 项目地址: https://gitcode.com/gh_mirrors/ua/UABEA 在Unity开发的世界里&#xff0c;资源管理往往是项目优化中最棘手的一环。你是否曾经…...

平衡车PID积分饱和问题

你发现了PID最致命的坑&#xff01; 你说的完全正确&#xff1a;积分&#xff08;Ki&#xff09;是累加的&#xff0c;会无限叠加&#xff0c;直接让PWM爆掉、车猛冲、失控&#xff01; 这就是积分饱和 —— 99%初学者死在这里。 我现在彻底讲透积分为什么炸、怎么修复、平衡车…...

如何快速掌握阴阳师自动化脚本:OAS解放双手的完整教程

如何快速掌握阴阳师自动化脚本&#xff1a;OAS解放双手的完整教程 【免费下载链接】OnmyojiAutoScript Onmyoji Auto Script | 阴阳师脚本 项目地址: https://gitcode.com/gh_mirrors/on/OnmyojiAutoScript 阴阳师自动化脚本&#xff08;Onmyoji Auto Script&#xff0c…...

期权交易基础框架:模块化设计与Python实现指南

1. 项目概述&#xff1a;一个为期权交易者打造的“乐高积木”底座如果你在量化交易或者期权策略开发领域摸爬滚打过一段时间&#xff0c;大概率会遇到一个共同的痛点&#xff1a;策略想法很多&#xff0c;但把它们变成可回测、可实盘、可管理的代码&#xff0c;却要耗费大量的“…...

PowerInfer:基于热点神经元预测的LLM高性能推理引擎部署指南

1. 项目概述&#xff1a;当推理速度成为AI落地的瓶颈最近在折腾本地大模型推理的朋友&#xff0c;估计都绕不开一个核心痛点&#xff1a;速度。模型效果再好&#xff0c;生成一句话要等上十几秒&#xff0c;那种“卡顿感”足以劝退绝大多数想把它集成到实际应用里的开发者。我自…...

OpenClaw 小龙虾智能体联动 DeepSeek 大模型部署实操攻略

前置准备 获取小龙虾open claw一键安装包&#xff08;www.totom.top&#xff09;并安装电脑端已成功安装并正常启动OpenClaw&#xff0c;右上角 Gateway 状态显示在线设备网络通畅&#xff0c;可正常访问 DeepSeek 开放平台拥有可接收验证码的手机号 / 微信&#xff0c;用于平…...

基于Stable Diffusion与LoRA技术打造个人AI头像:从原理到实战

1. 项目概述&#xff1a;当AI开始“自拍”——SelfyAI的定位与核心价值最近在AI图像生成领域&#xff0c;一个名为SelfyAI的项目引起了我的注意。它不是一个简单的文生图工具&#xff0c;而是瞄准了一个非常具体且高频的需求&#xff1a;生成高质量、风格一致的个人AI头像。简单…...

AI智能体GUI交互实战:从原理到实现,让AI玩转桌面应用

1. 项目概述&#xff1a;一个能“玩”游戏的AI智能体最近在AI智能体&#xff08;Agent&#xff09;的圈子里&#xff0c;一个名为“ChattyPlay-Agent”的开源项目引起了我的注意。乍一看名字&#xff0c;你可能会觉得它又是一个基于大语言模型&#xff08;LLM&#xff09;的聊天…...