У меня есть ряд датчиков, подключенных к ПК, которые измеряют различные физические параметры, такие как сила, скорость вращения и температура. Эти датчики непрерывно производят образцы с определенной частотой дискретизации. Образец состоит из метки времени и самого измеренного измерения; частота выборки находится в величинах одноцифрового килогерца (то есть от 1 до 9000 выборок в секунду).Быстрое распределение памяти для сбора данных в реальном времени
ПК должен считывать и хранить эти образцы в течение заданного периода времени. Затем собранные данные далее обрабатываются и оцениваются.
Что было бы разумным способом буферизации образцов? При некоторых реалистичных настройках приобретение может легко собрать пару мегабайт в секунду. Также пейджинг может быть критическим в том случае, если память распределяется быстро, но требует замены при записи.
Я мог бы подумать о поточном подходе, когда отдельный поток выделяет и управляет пулом (заблокированных, так не подлежащих замене) фрагментами памяти. Учитывая, что всегда выделены эти куски, выделение дополнительных блоков будет только блокироваться (в случае, если страницы с другими процессами должны быть заменены) этот поток пула памяти, и приобретение может продолжаться без перерыва.
Это принципиальный концептуальный вопрос. Тем не менее, более конкретно:
- Он должен полагаться только на переносные функции, такие как POSIX. Возможности Qt во вселенной тоже прекрасны.
- Датчики могут быть сопряжены различными способами. IP - одна из возможностей. Обычно датчики напрямую подключаются к ПК через локальные каналы (RS232, USB, карты расширения и т. Д.). То есть, достаточно быстро.
- Метки времени в основном применяются самого оборудования приобретения, если он способен при этом, чтобы избежать дрожания по сети и т.д.
обдумывая
Должен ли я действительно беспокоиться? По-видимому, проблема переводится в три сценария:
- Данных достаточно мало. Его можно легко буферизировать в одном большом предварительно выделенном буфере.
- Данные собираются медленно. Выделение буферов «на лету» отлично.
- Существует так много данных, полученных при высоких частотах выборки. Тогда распределение не является проблемой, потому что буфер в конечном итоге будет переполняться. Проблема скорее в том, как достаточно быстро перевести данные из буфера памяти в постоянное хранилище.
В какой операционной системе вы нацеливаетесь? – SirDarius
Взгляните на кольцевые буферы. Они обычно используются для буферизации данных в режиме реального времени. – jaggedSpire
Что такое интерфейс с датчиками? IP/сеть? Где применяется метка времени, на датчике или после трансспорта на ПК? –