о обработчиках в Нетти и параллелизме
-
25-10-2019 - |
Вопрос
У меня есть вопрос о параллелизме в верхних/нисходящих обработчиках канальной трубы. Я всегда думал, что если новый обработчик создается при построении трубы (то есть обработчик не разделен между трубами), не более одной нить взаимодействует с обработчиком.
Теперь я просматривал примеры. Более конкретно, возьмите это: http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/discarderverhandler.html
В коде есть переменная -член (она используется для подсчета общего количества байтов):
private final AtomicLong transferredBytes = new AtomicLong();
Почему они используют здесь атома? Обработчик построен следующим образом (см. http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/discardserver.html):
bootstrap.setPipelineFactory(new ChannelPipelineFactory() {
public ChannelPipeline getPipeline() throws Exception {
return Channels.pipeline(new DiscardServerHandler());
}
});
Таким образом, обработчик не разделен. Я не могу найти причину, по которой они хотели бы использовать атомиклонг, вместо простого, здесь. Кто -нибудь может объяснить?
Спасибо!
Решение
Это «ошибка» в примере. Здесь нет необходимости в атомиклонге. Так ты прав. Если вы добавите новый экземпляр обработчика в каждое создание канала, вам не нужно беспокоиться о таких проблемах параллелизма.
Я исправим пример в Нетти. Спасибо!