Максимальное количество дизрапторов в приложении

Используя LMAX Disruptor, мы заметили, что если мы используем 5-10 дизрапторов вместе в приложении (что-то вроде цепочки дизрапторов, в которой каждый дезраптор имеет одного потребителя, выполняющего указанную задачу, а затем передаёт сообщение следующему дизраптору). / ringbuffer). Происходит то, что загрузка ЦП достигает 90% и выше, и система перестает отвечать, пока мы не остановим приложение. Мы чувствуем, что это из-за большого количества активных потоков-нарушителей. Это происходит даже тогда, когда дезрапторы на самом деле ничего не обрабатывают. Может ли кто-нибудь прокомментировать, какое количество дезрапторов должно быть оптимальным для использования в приложении?


person NiksP    schedule 24.03.2014    source источник


Ответы (1)


Возможно, вам нужно изменить стратегии ожидания, которые вы используете для потребителей. Если вы используете стратегию «занято-ожидание» для всех из них, даже если в кольцевые буферы не поступало никаких входных данных, потоки опроса все равно могут связывать ресурсы ЦП, потому что они будут находиться в узких циклах, где они постоянно проверяют буфер для новых значений для чтения.

person Andrew Bissell    schedule 24.03.2014