Я познакомился с LMAX и этой замечательной концепцией RingBuffer. Итак, ребята говорят, что при написании на ringbuffer только с одной версией потока лучше, чем с несколькими производителями ...Запись одним потоком LMAX
Однако я не нахожу возможным, чтобы типичное приложение использовало только один поток для записи на ringbuffer .. Я действительно не понимаю, как это делает lmax (если они это делают). Например, N число разных трейдеров ставит заказы на обмен, это все асинхронные запросы, которые трансформируются в заказы и помещаются в ringbuffer, как они могут писать те, которые используют один поток?
Вопрос 1. Возможно, я пропустил что-то или не понял какой-то аспект, но если у вас есть N одновременных производителей, как можно объединить их в 1, а не блокировать друг друга?
Вопрос 2. Я помню rxJava наблюдаемые, где вы могли бы взять N наблюдаемых и объединить их в 1, используя Observable.merge. Интересно, блокирует ли он какой-либо замок или поддерживает какой-либо замок?
Так что, используя это для N производителей (где n не так много), будет работать быстрее, чем блокирование доступа на запись? – vach
@vach - Да. Любой неблокирующий алгоритм предпочтительнее одного с использованием блокировок. – OldCurmudgeon
Что я не могу понять, как LMAX удается сделать это в одном потоке? они получают много заказов одновременно, как они получают их в ringbuffer в одном потоке? Любые мысли об этом :)? – vach