c – 用于实时数据采集的快速存储器分配
我有一系列传感器连接到PC,可以测量各种物理参数,如力,转速和温度.这些传感器以一定的采样率连续生成样品.样本由时间戳和测量的维度本身组成;采样率的大小为一位数千赫兹(即每秒1至9000个样本之间).
PC应该在给定的时间段内读取和存储这些样本.然后,进一步处理和评估收集的数据. 什么是缓冲样品的合理方法?在一些现实的设置中,采集可以轻松地每秒收集几兆字节.如果内存快速分配但需要在写入时进行交换,则分页也很重要. 我可以想到一个线程方法,其中一个单独的线程分配和管理一个(锁定的,不可交换的)内存块池.鉴于预先分配了足够的这些块,进一步的分配只会阻塞(如果之前必须换掉其他进程的页面),这个内存池的线程和获取可以不间断地进行. 这基本上是一个概念性问题.然而,更具体一点: >它应该只依赖便携式功能,如POSIX.特征Qt的宇宙也很好. 想一想 我真的应该担心吗?显然,问题转移到三种情况: >根本收集的数据很少.它可以很容易地在一个大的预分配缓冲区中进行缓冲. 解决方法
解决此类问题的想法如下:
根据您需要对数据执行的操作,将问题分成两个或多个进程: >收购者 将数据存储在共享内存中的循环缓冲区中(我建议使用boost :: interprocess). 收单方将持续从设备读取数据并将其存储在共享存储器中.与此同时,一旦有足够的数据读取进行任何分析,分析仪将开始处理它.如果需要,它可以将结果存储到另一个循环缓冲区共享内存同时,Reader将从共享内存中读取数据(已获取或已处理)并将其存储在输出文件中. 您需要确保所有进程都正确同步,以便它们同时完成工作,并且不会丢失数据(数据在处理或保存到输出文件之前不会被覆盖). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |