Вопрос

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

Теперь я просматривал примеры. Более конкретно, возьмите это: 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());
    }
 });

Таким образом, обработчик не разделен. Я не могу найти причину, по которой они хотели бы использовать атомиклонг, вместо простого, здесь. Кто -нибудь может объяснить?

Спасибо!

Это было полезно?

Решение

Это «ошибка» в примере. Здесь нет необходимости в атомиклонге. Так ты прав. Если вы добавите новый экземпляр обработчика в каждое создание канала, вам не нужно беспокоиться о таких проблемах параллелизма.

Я исправим пример в Нетти. Спасибо!

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top