我有一系列传感器连接到PC上,测量各种物理参数,如力、旋转速度和温度。这些传感器以某个采样率连续产生样本。一个样本由时间戳和测量的维度本身组成;采样率在单位千赫兹的数量级之间(即每秒1到9000个样本之间)。
PC应该在一定的时间内读取并存储这些样本。之后,收集的数据将进一步处理和评估。
什么是缓冲样本的明智方式?在某些实际设置中,采集很容易每秒收集几兆字节的数据。此外,在写入时可能需要交换页面,如果内存分配快速但需要交换,则可能会出现问题。
我可以想到一种线程方法,其中一个单独的线程分配和管理一组(锁定,因此不可交换)内存块。假设总是预先分配足够多的这些块,进一步分配将只会阻塞(如果其他进程的页面必须在之前交换出去)此内存池的线程,并且采集可以在没有中断的情况下进行。
这基本上是一个概念性问题。然而,为了更具体:
- 它应该仅依赖于可移植功能,如POSIX。Qt的功能也可以。 - 传感器可以以各种方式进行接口。IP是一种可能性。通常,传感器通过本地链接(RS232、USB、扩展卡等)直接连接到PC上。也就是说,足够快。 - 时间戳大多由采集硬件本身应用,以避免网络抖动等。
思考一下
我真的需要担心吗?显然,问题分为三个方案:
1.根本没有收集到多少数据。它可以轻松地缓冲在一个大的预先分配的缓冲区中。
2.数据被慢慢地收集。即时分配缓冲区也完全没问题。
3.高采样率下收集了很多数据。然后,分配不是问题,因为缓冲区最终会溢出。问题在于如何将数据从内存缓冲区快速传输到永久存储器。
PC应该在一定的时间内读取并存储这些样本。之后,收集的数据将进一步处理和评估。
什么是缓冲样本的明智方式?在某些实际设置中,采集很容易每秒收集几兆字节的数据。此外,在写入时可能需要交换页面,如果内存分配快速但需要交换,则可能会出现问题。
我可以想到一种线程方法,其中一个单独的线程分配和管理一组(锁定,因此不可交换)内存块。假设总是预先分配足够多的这些块,进一步分配将只会阻塞(如果其他进程的页面必须在之前交换出去)此内存池的线程,并且采集可以在没有中断的情况下进行。
这基本上是一个概念性问题。然而,为了更具体:
- 它应该仅依赖于可移植功能,如POSIX。Qt的功能也可以。 - 传感器可以以各种方式进行接口。IP是一种可能性。通常,传感器通过本地链接(RS232、USB、扩展卡等)直接连接到PC上。也就是说,足够快。 - 时间戳大多由采集硬件本身应用,以避免网络抖动等。
思考一下
我真的需要担心吗?显然,问题分为三个方案:
1.根本没有收集到多少数据。它可以轻松地缓冲在一个大的预先分配的缓冲区中。
2.数据被慢慢地收集。即时分配缓冲区也完全没问题。
3.高采样率下收集了很多数据。然后,分配不是问题,因为缓冲区最终会溢出。问题在于如何将数据从内存缓冲区快速传输到永久存储器。