Имя структуры данных - PullRequest
       0

Имя структуры данных

0 голосов
/ 04 января 2019

Вот описание проблемы:

У меня есть объект, представляющий единицу работы (выгрузка большого количества данных на сервер).Объекты должны обрабатываться (загружаться) в последовательности FIFO (очереди) по одному за раз.Как только объект закончен и обрабатывается, он должен сообщить следующему объекту в строке, что ему нужно начать.

Есть и другие крайние случаи / соображения.Во-первых, если очередь пуста и объект вставлен, он должен немедленно начать обработку.Во-вторых, вся очередь должна сохраняться и иметь возможность восстановления после завершения программы, если она была остановлена.

Есть идеи, как смоделировать это решение?У меня есть приложение, в котором есть решение, но оно волосатое и не очень краткое.Ищете что-то красноречивое.

Ответы [ 3 ]

0 голосов
/ 04 января 2019

Как уже упоминалось @AShelly, вы описываете проблему Producer-Consumer , где типичной базовой структурой данных является очередь.

В частности, у вас есть процесс, который генерирует данныечтобы загрузить на сервер.Этот процесс является продюсером.Другой процесс - сохранение этих данных на сервере. Это означает, что этот процесс является потребителем.

Сложной задачей является синхронизация этих двух процессов, что обычно достигается с помощью семафоров.

Пока чтоэтот ответ полностью покрывает ваш, но второй крайний случай, который требует неэфемерной структуры данных.

Один из подходов заключается в создании персистентной очереди , поскольку она уже будет соответствоватьтипичная структура данных, используемая в задаче «производитель-потребитель».

Caveeat: что происходит с объектом, когда программа завершает работу в процессе обработки?Это начинается сначала, или как-то вы продолжаете именно там, где остановились?Вы можете оставить это на потом и сделать свой личный выбор по пути.

0 голосов
/ 07 января 2019

Если объект должен быть постоянным, создание очереди в файле с помощью mmap является одним из возможных практических решений.Либо два потока, либо два процесса могут работать с одним, помещая объект в очередь, а затем загружать его на сервер.Между ними можно поддерживать IPC, такие как очередь, канал или fifo.При перезагрузке системы этот IPC можно восстановить из файла mmap.Если постоянная очередь IPC доступна, это тоже хорошее решение.Это зависит от таких аспектов, как ограничения очереди или размер объекта.

0 голосов
/ 04 января 2019

Во-первых, вам нужно более одной структуры данных здесь.1. обработка событий (когда процессор и помощник общаются друг с другом) с помощью очереди. 2. Постоянная структура данных (имеется множество информации, пожалуйста, посмотрите в вики).

Во-вторых, как вы хотите обработать сигнал?основано ли это на каком-либо приоритете или только на FIFO?

В-третьих, если вы разрабатываете приложение для Android, уже есть API.Я не уверен, какую платформу вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...