我使用自己的线程池来处理耗时的任务。我们知道一个ChannelHanlder只能由一个EventLoop处理,而一个eventloop可以处理一系列chanelhandler,因此可以保证线程安全。但是当我使用自己的线程池时,netty可以安全吗?如果可以,为什么?
ch.pipeline().addLast(bussLogicGroup, "ClientBussLogicGroup", clientHandler);
答案 0 :(得分:0)
您可以从不属于EventLoopGroup的其他非线程中进行写入,而不会引起任何问题。请参见well-defined-thread-model,但用户仍然要负责写入的顺序。来自链接的示例:
Channel ch = ...;
ByteBuf a, b, c = ...;
// From Thread 1 - Not the EventLoop thread
ch.write(a);
ch.write(b);
// .. some other stuff happens
// From EventLoop Thread
ch.write(c);
// The order a, b, and c will be written to the underlying transport is not well
// defined. If order is important, and this threading interaction occurs, it is
// the user's responsibility to enforce ordering.