目录

介绍

背景

使用代码

兴趣点


  • 下载源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框架,但是为了简单起见,我使用的是简单的线程数组。实际上,我不倾向于别人“管理我的线程”

间歇输入数据的数据处理设计模式相关推荐

  1. 控制台输入数据及数据处理

    //    控制台输入数据测试代码 package LinkedTest; import java.io.BufferedReader; import java.io.IOException; imp ...

  2. 操作系统——精髓与设计原理 第一章复习题习题

    操作系统--精髓与设计原理 第一章复习题&习题 复习题 1.1 列出并简要地定义计算机的四个主要组成部分 1.2定义处理器寄存器的两种主要类别 1.3一般而言,一条机器指令能指定的四种不同的操 ...

  3. c语言程序实际问题,《编程解决问题之程序规划语言(c语言)》.doc

    <编程解决问题之程序规划语言(c语言)> <编程解决问题之程序设计语言(c语言)> 课程内容介绍: 本课程主要是介绍如何利用c程序设计语言,编写程序,解决实际问题.目的是提高学 ...

  4. MVC,MVP,MVVM

    MVC MVC模式的意思是,软件可以分成三个部分 视图(View):用户界面. 控制器(Controller):业务逻辑 模型(Model):数据保存 实际项目往往采用更灵活的方式,以 Backbon ...

  5. Unity性能优化之动态图形渲染

    毫无疑问的,现代图形设备的管线渲染非常复杂,即使在屏幕上仅仅渲染一个最简单的三角形,也要执行大量的API,其中包含了很多任务,如:为挂接到操作系统的相机视图创建缓冲区:为顶点数据分配缓冲区:建立数据通 ...

  6. 《操作系统——精髓与设计原理(第八版)》复习题抄录

    手敲一遍,便于记忆:记录下来,便于复习. 第一部分 背景知识 第1章 计算机系统概述 1.1 列出并简要定义计算机的4个主要组成部分. 答: 处理器(Processor):控制计算机的操作,执行数据处 ...

  7. 读书笔记_Unity3d 游戏优化2

    推荐序2 成为一名优秀的游戏客户端开发者,不仅需要常年的实践积累与思考,更需要夯实的基础为支撑.大部分开发者都很努力刻苦,但是为什么不同开发者之间的能力参差不齐?这是因为日常开发过程中的经验很多时候只 ...

  8. 操作系统精髓与原理--复习题答案整理

    学习一章便更新一章,亲自敲一遍助于记忆. 操作系统精髓与原理--复习题答案 第一章 计算机系统概述 第二章 操作系统概述 第三章 进程描述和控制 第四章 线程.对称多处理和微内核 第五章 并发性:互斥 ...

  9. 高精度组合导航里的松、紧、深耦合

    交流群 | 进"滑板底盘群"请加微信号:xsh041388 交流群 | 进"域控制器群"请加微信号:ckc1087 备注信息:滑板底盘/域控制器+真实姓名.公司 ...

最新文章

  1. 剑指offer:面试题09. 用两个栈实现队列
  2. ABAP类的继承、多态、重载
  3. 追求代码质量: 用 AOP 进行防御性编程
  4. [Medical Image Processing] 1. Introduction
  5. quartz定时器依赖_Grails集成Quartz插件实现定时任务(Job)
  6. js中几种实用的跨域方法原理详解
  7. python的excel库_Python-Excel 模块哪家强?
  8. 数学发展重在人才,丘成桐鼓励年轻学子“无法无天”
  9. 网站直达上线运营,API接口开发中
  10. 余弦相似度 高维数据_海量高维数据与近似最近邻
  11. taskctl控制容器之定时器个人理解
  12. 软件供应链安全威胁:从“奥创纪元”到“无限战争”
  13. 游戏攻略资料收集,制作技巧经验分享-游戏编辑2
  14. Hard Disk Sentinel Pro v5.70.8 硬盘哨兵 电脑硬盘检测工具
  15. 【C语言练习】1.1弹跳小球
  16. Jetbrains系列软件常用快捷键/模板/调试
  17. dw中flash透明参数
  18. [玩转UE4/UE5动画系统>应用篇>功能模块] 之 ALS V4 主状态机详解
  19. 《西游记》师徒四人给我们的职场启发
  20. 【题解】同济线代习题二 8.2

热门文章

  1. java关键字说明_JAVA常用关键字及其用法简要说明
  2. vscode 支持ansi_vscode terminal美化
  3. 用servlet路径访问一个html,java web中servlet、jsp、html 互相访问的路径问题
  4. UI设计灵感|有声读物APP界面设计
  5. 2021牛年春节海报PSD分层模板,简单一点就好!
  6. 别找了,你要的中国民间神话故事在这里!
  7. 困计算机无法启动adb,win7系统无法启动adb.exe工具包的解决方法
  8. 懒人修仙传ce修改方法_专访|《凡人修仙传》原著作者忘语:“韩老魔”原型是我...
  9. Go语言学习Day06
  10. Ubuntu16.04 下SU画图,批量和单个