1

在 netty 中,我创建了一个通道工厂,如下所示。

ChannelFactory factory = new NioServerSocketChannelFactory(Executors.newCachedThreadPool(threadFactory), Executors.newCachedThreadPool(threadFactory);

当一个新的请求到来时,boss线程如何从workerthread池中为新的请求分配一个空闲的worker线程呢?我可以在哪个 netty 类中找到这个逻辑?

4

2 回答 2

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 并运行这个新任务。

于 2013-09-29T07:27:07.020 回答
0

看这里

Boss 线程 每个绑定的 ServerSocketChannel 都有自己的 Boss 线程。

老板线程接受传入的连接,直到端口未绑定。一旦成功接受连接,boss 线程将接受的 Channel 传递给 NioServerSocketChannelFactory 管理的工作线程之一。

来自Netty 如何使用线程池?

现在有些事情会有所改善

网络问题 240

于 2013-09-17T04:46:20.970 回答