Производство задач по требованию в схеме производитель-потребитель - PullRequest
1 голос
/ 15 февраля 2020

Давайте рассмотрим следующую ситуацию в шаблоне производитель-потребитель:

Я не могу дождаться выполнения задачи. Я хочу создать задачу по требованию (например, с Supplier), когда потребитель готов ее обработать. В SynchronousQueue мне нужно иметь актуальную задачу при выполнении метода put(). Как решить мою проблему?

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

Чтобы быть более точным c: Давайте рассмотрим, что у меня есть удаленный http-ресурс A. Я могу получить от него «задачу» для обработки в моих рабочих потоках. Результаты отправляются асинхронно. Но дело в том, что мне не следует получать задание от А, если я не могу выполнить его прямо сейчас.

Ответы [ 2 ]

1 голос
/ 15 февраля 2020

«Я хочу создать задание по требованию (например, с поставщиком), когда потребитель готов его обработать». Одним из примеров получения данных по запросу является протокол Reactive Streams , где Subscriber (потребитель) запрашивает Publisher (производитель) до pu sh следующий фрагмент данных с помощью метода Subscription.request().

Этот протокол реализован в Rx Java и других библиотеках.

0 голосов
/ 15 февраля 2020

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

Тогда все уведомляются как раз вовремя.

Или есть какие-то другие ограничения с фактическими задачами. Или я как-то Вас неправильно понимаю? С какой стороны производитель-потребитель голодает?

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