7

複数のスレッドをチャネルに書き込みたい Netty アプリがあります。Channel.write がスレッドセーフかどうか疑問に思っていましたか?

4

3 に答える 3

7

コードからわかるように、ChannelOutboundBuffer.addMessage()メソッド自体はスレッド セーフではありません。ただし、netty は単一の I/O スレッドで書き込みタスク/メソッドを実行するため、書き込みチャネルは「スレッドセーフ」です。

于 2015-12-17T09:01:42.277 に答える
3

スレッドセーフなので、心配する必要はありません。

于 2012-06-19T09:25:48.640 に答える
0

いいえ、パイプラインの HeadContext でChannel.write呼び出すため、これはスレッドセーフではなく、間違いなくスレッドセーフではありません。このコードを見てください:ChannelOutboundBuffer.addMessageChannelOutboundBuffer.addMessage

 public void addMessage(Object msg, int size, ChannelPromise promise) {
     Entry entry = Entry.newInstance(msg, size, total(msg), promise);
     if (tailEntry == null) {
         flushedEntry = null;
         tailEntry = entry;
     } else {
         Entry tail = tailEntry;
         tail.next = entry;
         tailEntry = entry;
     }
     if (unflushedEntry == null) {
         unflushedEntry = entry;
     }

     // increment pending bytes after adding message to the unflushed arrays.
     // See https://github.com/netty/netty/issues/1619
     incrementPendingOutboundBytes(size, false);
 }
于 2015-07-31T06:00:17.683 に答える