Многопоточное приложение - помогите с псевдокодом! - PullRequest
1 голос
/ 14 апреля 2010

Я работаю над многопоточным приложением и мне нужна помощь с некоторым псевдокодом. Чтобы упростить его реализацию, я попытаюсь объяснить это в простых терминах / контрольном примере.

Вот сценарий -

У меня есть список массивов строк (скажем, 100 строк)

У меня есть класс Reader, который читает строки и передает их в класс Writer, который выводит строки на консоль. Прямо сейчас это работает в однопоточной модели.

Я хотел сделать это многопоточным, но со следующими функциями -

Возможность установить MAX_READERS

Возможность установить MAX_WRITERS

Возможность установить BATCH_SIZE

Таким образом, в основном код должен создавать экземпляры этих многих Читателей и Авторов и выполнять работу параллельно.

Любой псевдокод действительно поможет мне в этом!

Ответы [ 2 ]

3 голосов
/ 14 апреля 2010

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

0 голосов
/ 15 апреля 2010

Помимо использования предложенного шаблона "производитель-потребитель" , я бы порекомендовал использовать CopyOnWriteArrayList , чтобы вы могли без блокировки выполнять чтение / запись / итерацию вашего список. Поскольку вы работаете только с несколькими сотнями строк, у вас, вероятно, не будет проблем с производительностью с CopyOnWriteArrayList.

Если вы беспокоитесь о производительности, я думаю, что было бы лучше, если вы используете BlockingQueue или ConcurrentHashMap . Они позволят вам максимизировать пропускную способность вашего многопоточного приложения.


Рекомендуемая опция:
A BlockingQueue очень хорошо работает с несколькими производителями и потребителями, но, конечно, это подразумевает порядок обработки данных (FIFO). Если вы согласны с порядком FIFO, вы, вероятно, обнаружите, что BlockingQueue - более быстрый и надежный вариант.


Я думаю, что в статье в Википедии достаточно псевдокода, чтобы вы могли ее использовать, но вы также можете проверить некоторые из следующих SO вопросов:
https://stackoverflow.com/search?q=java+producer+consumer

Дизайн Java-производителя-потребителя:
Потоки производителя / потребителя, использующие очередь
Дизайн приложения «Производитель / Потребитель»

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