2016-04-18 1 views
1

Je travaille sur l'utilisation de FixedChannelPool de netty pour maintenir les connexions simultanées. Puisque plusieurs threads vont accéder au pool de canaux, je me demandais si les opérations acquire() et release (channel) sont thread safe?Les threads d'opérations de pools de canaux netty sont-ils sécurisés?

TIA

+0

Copie possible de la [chaîne de threads de canal de datagramme Netty] (http://stackoverflow.com/questions/36627619/netty-datagram-channel-threadsafity) – Ferrybig

+0

L'autre question parle de la sécurité des threads de channel.writeAndFlush. Où, comme ma question est de savoir si les méthodes d'acquisition et de libération d'un pool de chaînes sont thread safe. – mariner

+1

La réponse est fondamentalement la même, [la source] (http://netty.io/4.0/xref/io/netty/channel/pool/FixedChannelPool.html#200) d'acquérir utilise la même logique pour vérifier les threads – Ferrybig

Répondre

0

Il y a un commentaire à FixedChannelPool à propos de cette question: // There is no need to worry about synchronization as everything that modified the queue or counts is done by the above EventExecutor.

Mais je pense que cela est thread-safe, parce que la promesse de connexion peut être ajouté à TaskQueue d'un fil de eventloop. Si la promesse connect de la même clé est ajoutée à taskQueue de deux eventloop différents, quand ils sont exécutés par le eventloop, cela conduira à une circonstance non-thread thread, ce qui signifie que si vous définissez le nombre maximum de canaux à 1, acquérir simultanément, vous pouvez créer 2 canaux.

Veuillez préciser si je fais une erreur en comprenant ces logiques.