【问题标题】:How does netty allocate worker thread to new request?netty 如何为新请求分配工作线程?
【发布时间】:2016-04-27 11:29:40
【问题描述】:
在 netty 中,我创建了一个通道工厂,如下所示。
ChannelFactory 工厂 =
新的 NioServerSocketChannelFactory(
Executors.newCachedThreadPool(threadFactory),
Executors.newCachedThreadPool(threadFactory);
当一个新的请求到来时,boss线程如何从workerthread池中为新的请求分配一个空闲的worker线程?在哪个 netty 类中可以找到这个逻辑?
【问题讨论】:
标签:
java
netty
nio
worker
【解决方案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 并运行这个新任务。