netty如何将工作线程分配给新请求?

时间:2013-09-16 14:13:22

标签: java netty nio worker

在netty中,我按如下方式创建了一个频道工厂。

  

ChannelFactory factory =           新的NioServerSocketChannelFactory(               Executors.newCachedThreadPool(threadFactory)不同,               Executors.newCachedThreadPool(的ThreadFactory);

当新请求到来时,boss线程如何将自由工作线程分配给来自workerthread池的新请求?我可以在哪个netty类中找到这个逻辑?

2 个答案:

答案 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?

现在有些事情会有所改善

netty-issues-240