间歇输入数据的数据处理设计模式
目录
介绍
背景
使用代码
兴趣点
- 下载源1.5 KB
介绍
如果您的数据是间歇性的(非连续性),那么我们可以利用时间跨度间隔来优化CPU\RAM利用率。这个想法是在下一批数据到达之前处理数据。假设您每T秒接收N个输入数据,每个数据的大小为d,而一个数据需要P秒的处理时间。如果使用单线程,则所需的总输出时间将为N x P秒。如果N x P <T,那么无论如何编程都没有问题。但是,如果N x P> T,那么您需要多个线程,即,当处理输入所需的时间大于两个连续批次的数据之间的时间。如果我们为多个线程引入另一个变量,那么我们的问题将简化为 [ (N x P) / c ] < T。
下一个约束是可以创建多少个线程?那限制了因子c。如果c太高,则会消耗大量CPU。在这里,我们引入了RAM利用率。随着数据的传入,我们首先将其存储在内存中,然后使用c线程对其进行处理。因此,在任何时候,队列中都会有c个活动线程和Nc个待处理项目。假设r个可以在内存中的批次,一个批次可以一次由c个线程处理。一批次大小为cxd。现在我们可以将其归结为:
- [ (N x P) / (r x c) ] < T
- r = Affordable RAM / (c x d)
背景
当您以特定的频率收集数据时,此方案主要适用于基于轮询的系统。因此,假设数据流是间歇性的并且间隔一定时间发生。您可以利用数据收集之间的时间间隔来最佳利用CPU和RAM。
使用代码
我们需要一种调查性的数据处理方法,因为一种尺寸无法容纳所有尺寸。诸如N,d和P之类的许多参数事先未知。因此,我们需要设计还提供统计信息,以便我们可以了解N,d和P并相应地调整CPU和RAM的需求。
作为粗略的指导,我们需要一种方法来摄取通过线程提交的所有数据。然后,立即开始处理它们或将它们排成队列并在多个线程中处理它们。
C#为线程安全的集合提供了阻止和限制功能。这是一个有趣的功能,可用于优化高负载应用程序的CPU和内存。此模式可以进一步堆叠和互连,以构建数据路由的有向图。该模式已在Apache Nifi处理器中广泛使用。
在深入探讨模式之前,让我们了解什么是边界和阻塞。他们解决什么问题?
当有多个线程试图从容器中获取数据时,我们希望线程阻塞直到有更多数据可用为止。这称为“阻止”。
当多个线程正在写入数据时,我们希望它们进行绑定,直到有一些可用的内存来容纳新数据。这称为“边界”。
因此,我们可以将阻塞集合用作基础数据容器。
BlockingCollection DataContainer = new BlockingCollection<string>(
new ConcurrentBag<string>(),
this.MaxContainerSize);
对于线程池,您可以使用内置于线程池中的.NET框架,但是为了简单起见,我使用的是简单的线程数组。实际上,我不倾向于别人“管理我的线程”
间歇输入数据的数据处理设计模式相关推荐
- 控制台输入数据及数据处理
// 控制台输入数据测试代码 package LinkedTest; import java.io.BufferedReader; import java.io.IOException; imp ...
- 操作系统——精髓与设计原理 第一章复习题习题
操作系统--精髓与设计原理 第一章复习题&习题 复习题 1.1 列出并简要地定义计算机的四个主要组成部分 1.2定义处理器寄存器的两种主要类别 1.3一般而言,一条机器指令能指定的四种不同的操 ...
- c语言程序实际问题,《编程解决问题之程序规划语言(c语言)》.doc
<编程解决问题之程序规划语言(c语言)> <编程解决问题之程序设计语言(c语言)> 课程内容介绍: 本课程主要是介绍如何利用c程序设计语言,编写程序,解决实际问题.目的是提高学 ...
- MVC,MVP,MVVM
MVC MVC模式的意思是,软件可以分成三个部分 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 实际项目往往采用更灵活的方式,以 Backbon ...
- Unity性能优化之动态图形渲染
毫无疑问的,现代图形设备的管线渲染非常复杂,即使在屏幕上仅仅渲染一个最简单的三角形,也要执行大量的API,其中包含了很多任务,如:为挂接到操作系统的相机视图创建缓冲区:为顶点数据分配缓冲区:建立数据通 ...
- 《操作系统——精髓与设计原理(第八版)》复习题抄录
手敲一遍,便于记忆:记录下来,便于复习. 第一部分 背景知识 第1章 计算机系统概述 1.1 列出并简要定义计算机的4个主要组成部分. 答: 处理器(Processor):控制计算机的操作,执行数据处 ...
- 读书笔记_Unity3d 游戏优化2
推荐序2 成为一名优秀的游戏客户端开发者,不仅需要常年的实践积累与思考,更需要夯实的基础为支撑.大部分开发者都很努力刻苦,但是为什么不同开发者之间的能力参差不齐?这是因为日常开发过程中的经验很多时候只 ...
- 操作系统精髓与原理--复习题答案整理
学习一章便更新一章,亲自敲一遍助于记忆. 操作系统精髓与原理--复习题答案 第一章 计算机系统概述 第二章 操作系统概述 第三章 进程描述和控制 第四章 线程.对称多处理和微内核 第五章 并发性:互斥 ...
- 高精度组合导航里的松、紧、深耦合
交流群 | 进"滑板底盘群"请加微信号:xsh041388 交流群 | 进"域控制器群"请加微信号:ckc1087 备注信息:滑板底盘/域控制器+真实姓名.公司 ...
最新文章
- 剑指offer:面试题09. 用两个栈实现队列
- ABAP类的继承、多态、重载
- 追求代码质量: 用 AOP 进行防御性编程
- [Medical Image Processing] 1. Introduction
- quartz定时器依赖_Grails集成Quartz插件实现定时任务(Job)
- js中几种实用的跨域方法原理详解
- python的excel库_Python-Excel 模块哪家强?
- 数学发展重在人才,丘成桐鼓励年轻学子“无法无天”
- 网站直达上线运营,API接口开发中
- 余弦相似度 高维数据_海量高维数据与近似最近邻
- taskctl控制容器之定时器个人理解
- 软件供应链安全威胁:从“奥创纪元”到“无限战争”
- 游戏攻略资料收集,制作技巧经验分享-游戏编辑2
- Hard Disk Sentinel Pro v5.70.8 硬盘哨兵 电脑硬盘检测工具
- 【C语言练习】1.1弹跳小球
- Jetbrains系列软件常用快捷键/模板/调试
- dw中flash透明参数
- [玩转UE4/UE5动画系统>应用篇>功能模块] 之 ALS V4 主状态机详解
- 《西游记》师徒四人给我们的职场启发
- 【题解】同济线代习题二 8.2
热门文章
- java关键字说明_JAVA常用关键字及其用法简要说明
- vscode 支持ansi_vscode terminal美化
- 用servlet路径访问一个html,java web中servlet、jsp、html 互相访问的路径问题
- UI设计灵感|有声读物APP界面设计
- 2021牛年春节海报PSD分层模板,简单一点就好!
- 别找了,你要的中国民间神话故事在这里!
- 困计算机无法启动adb,win7系统无法启动adb.exe工具包的解决方法
- 懒人修仙传ce修改方法_专访|《凡人修仙传》原著作者忘语:“韩老魔”原型是我...
- Go语言学习Day06
- Ubuntu16.04 下SU画图,批量和单个