Полируемый разрушитель - PullRequest
       42

Полируемый разрушитель

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

Я провел немало исследований, но пока не могу найти решение. Я хотел бы найти pollable ring buffer, похожий на LMAX disruptor. У меня много издателей и один читатель.

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

Одна альтернатива, которую я вижу, это использовать ManyToOneConcurrentArrayQueue из agrona или MpscArrayQueue из jctools. Но ни одна из этих очередей preallocates объектов в пути LMAX disruptor не делает. Когда я звоню ManyToOneConcurrentArrayQueue::offer или MpscArrayQueue::offer, я передаю право собственности на объект в очередь, а когда я звоню ManyToOneConcurrentArrayQueue::poll или MpscArrayQueue::poll, я забираю право собственности у них. Это проблема, так как это заставляет меня иметь отдельный пул объектов для переработки этих объектов, чтобы избежать создания мусора. Это, очевидно, медленнее, чем иметь preallocated array, который всегда сохраняет владение своим содержимым (в виде RingBuffer в пакете прерывателя LMAX).

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

1 Ответ

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

Можно напрямую использовать реализацию разрушителей LMAX RingBuffer .

Потенциальное использование других частей проекта без запуска разрушителя в целом.

...