複数のスレッドをチャネルに書き込みたい Netty アプリがあります。Channel.write がスレッドセーフかどうか疑問に思っていましたか?
4730 次
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.addMessage
ChannelOutboundBuffer.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 に答える