我有一个 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 回答