我有一系列传感器连接到PC,可测量各种物理参数,如力,转速和温度。这些传感器以一定的采样率连续生成样品。样本由时间戳和测量的维度本身组成;采样率的大小为一位数千赫兹(即每秒1到9000个样本之间)。
PC应该在给定的时间段内读取和存储这些样本。然后进一步处理和评估收集的数据。
缓冲样品的合理方法是什么?在一些现实的设置中,采集可以轻松地每秒收集几兆字节。如果内存快速分配但需要在写入时进行交换,则分页也很重要。
我可以想到一种线程方法,其中一个单独的线程分配和管理一个(锁定的,不可交换的)内存块池。鉴于预先分配了足够的这些块,进一步的分配只会阻塞(如果之前必须换掉其他进程的页面),这个内存池的线程和获取可以不间断地进行。
这基本上是一个概念性问题。然而,更具体一点:
答案 0 :(得分:1)
解决此类问题的想法如下:
根据您对数据的处理,将问题分成两个或多个进程:
将数据存储在共享内存中的循环缓冲区中(我建议使用boost :: interprocess)。
收件人将不断从设备读取数据并将其存储在共享内存中。与此同时,一旦有足够的数据读取进行任何分析,分析仪将开始处理它。如果需要,它可以将结果存储到另一个循环缓冲区共享内存同时,Reader将从共享内存(已获取或已处理)中读取数据并将其存储在输出文件中。
您需要确保所有进程都正确同步,以便它们同时完成工作,并且不会丢失数据(数据在处理或保存到输出文件之前不会被覆盖)。