LINUX.ORG.RU

Как нынче модно решать проблему Producer/Consumer?


0

1

Мне известно несколько подходов к этой проблеме, подозреваю, что неизвестно больше:

1) Корутины. И producer и consumer живут в одном потоке, а значит реализовать, скажем, неблокирующий прелоад или гц ресурсов нельзя.

2) Iteratees, pipes и ещё десяток подобных библиотек. Более примитивны во всех смыслах, за исключением, может, pipes с его "клиент-серверной" моделью под капотом.

3) Некоторые эстеты используют продолжения. Мой бедный опыт использования продолжений подсказывает, что здесь опять проблема с взаимной блокировкой, prove me wrong.

4) Акторы, с помощью которых можно реализовать всамделишный клиент-сервер. Оверкилл.

Поскольку мне важно, чтобы consumer мог игнорировать недогруженные данные по своему усмотрению, а producer тоже был бы умным в плане использования различных эвристик, пока склоняюсь к 4, но это решение кажется слишком жирным во всех смыслах.

Можно ли дополнить этот список?


4) Акторы, с помощью которых можно реализовать всамделишный клиент-сервер. Оверкилл.

сам ты килловер! у нас модно именно так!

anonymous
()

Как нынче модно решать проблему Producer/Consumer?

А хрен его знает. Я беру ZeroMQ и не заморачиваюсь.

no-such-file ★★★★★
()

0. мониторы. исторически это решение было первым.

anonymous
()
Ответ на: комментарий от hateyoufeel

Такая вот дурацкая задача, где оперативность ответа зачастую важнее его точности. Т.е. «часть дерева не успела подгрузиться из файла на 200 гигабайт? фиг с ней, возвращаем оценочное значение».

fmdw
() автор топика
Ответ на: комментарий от fmdw

Так в любом случае очереди/сообщения. В смысле, отдельные потоки тебе будут необходимы.

monk ★★★★★
()
Ответ на: комментарий от fmdw

Такая вот дурацкая задача, где оперативность ответа зачастую важнее его точности. Т.е. «часть дерева не успела подгрузиться из файла на 200 гигабайт? фиг с ней, возвращаем оценочное значение».

Мб не стоит тогда заморачиваться с тредами и прочим, и просто грузить данные пока точность не будет достаточной? В любом случае, без полного описания задачи мало что можно сказать.

hateyoufeel ★★★★★
()

Х.з. как это модно, я делаю через ArrayBlockingQueue<T> правда в яве.

Nagwal ★★★★
()

Reactive Extensions для .NET, для натива можно посмотреть ZeroMQ inproc://

ebantrop
()

4) Акторы, с помощью которых можно реализовать всамделишный клиент-сервер. Оверкилл.

Оверкилл - это приятно! :3

stevejobs ★★★★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.