Domanda

Ho una domanda sulla concorrenza nei gestori a monte / a valle di un tubo canale. Ho sempre pensato che se viene creato un nuovo gestore quando il tubo è costruito (cioè, il gestore non è condivisa tra i tubi), al massimo uno interagisce con filo conduttore.

Ora, stavo dando un'occhiata agli esempi. Più specifico, prendere questo: http: //docs.jboss.org/netty/3.2/xref/org/jboss/netty/example/discard/DiscardServerHandler.html

Nel codice, v'è una variabile membro (viene utilizzato per contare il numero totale di byte):

private final AtomicLong transferredBytes = new AtomicLong();

Perché usano un AtomicLong qui? Il gestore è costruito come segue (vedi 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());
    }
 });

Quindi, il gestore non è condivisa. Non riesco a trovare un motivo per cui vorrebbe utilizzare un AtomicLong, invece di una pianura lunga, qui. Qualcuno può spiegare?

Grazie!

È stato utile?

Soluzione

E 'un "bug" nell'esempio. Non v'è alcuna necessità per l'AtomicLong qui. Quindi hai ragione. Se si aggiunge una nuova istanza del gestore su ogni creazione ChannelPipeline non dovrebbe essere necessario perdere tempo con questo tipo di problemi di concorrenza.

I risolverà l'esempio nella Netty. Grazie!

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top