о обработчиках в Netty и параллелизме - PullRequest
1 голос
/ 30 ноября 2011

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

Теперь я просматривал примеры. Более конкретно, возьмите это: http://docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/DiscardServerHandler.html

В коде есть переменная-член (она используется для подсчета общего количества байтов):

private final AtomicLong transferredBytes = new AtomicLong();

Почему они используют 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());
    }
 });

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

Спасибо!

1 Ответ

6 голосов
/ 30 ноября 2011

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

Я исправлю пример в netty. Спасибо!

...