在netty中,我按如下方式创建了一个频道工厂。
ChannelFactory factory = 新的NioServerSocketChannelFactory( Executors.newCachedThreadPool(threadFactory)不同, Executors.newCachedThreadPool(的ThreadFactory);
当新请求到来时,boss线程如何将自由工作线程分配给来自workerthread池的新请求?我可以在哪个netty类中找到这个逻辑?
答案 0 :(得分:1)
您可以在 NioServerBoss.class 中找到逻辑。以下是netty源代码的一部分。
for (;;) {
SocketChannel acceptedSocket = channel.socket.accept();
if (acceptedSocket == null) {
break;
}
registerAcceptedChannel(channel, acceptedSocket, thread);
}
registerAcceptedChannel的一部分:
NioWorker worker = parent.workerPool.nextWorker();
worker.register(new NioAcceptedSocketChannel(
parent.getFactory(), pipeline, parent, sink
, acceptedSocket,
worker, currentThread), null);
工作线程将检查其taskQueue并运行此新任务。
答案 1 :(得分:0)
见这里
Boss线程 每个绑定的ServerSocketChannel都有自己的boss线程。
boss线程接受传入连接,直到端口未绑定。 成功接受连接后, boss线程将接受的Channel传递给NioServerSocketChannelFactory管理的工作线程之一。
来自How Netty uses thread pools?
现在有些事情会有所改善