Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/flutter/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java netty如何将工作线程分配给新请求?_Java_Netty_Nio_Worker - Fatal编程技术网

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

Java netty如何将工作线程分配给新请求?,java,netty,nio,worker,Java,Netty,Nio,Worker,在netty中,我创建了一个通道工厂,如下所示 渠道工厂= 新NioServerSocketChannelFactory( Executors.newCachedThreadPool(threadFactory), Executors.newCachedThreadPool(threadFactory) 当新请求出现时,boss线程如何从workerthread池中为新请求分配空闲工作线程?在哪个netty类中可以找到此逻辑?请参见此处 凸台螺纹 每个绑定的ServerSocketChannel

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

渠道工厂= 新NioServerSocketChannelFactory( Executors.newCachedThreadPool(threadFactory), Executors.newCachedThreadPool(threadFactory)

当新请求出现时,boss线程如何从workerthread池中为新请求分配空闲工作线程?在哪个netty类中可以找到此逻辑?

请参见此处

凸台螺纹 每个绑定的ServerSocketChannel都有自己的boss线程

boss线程接受传入连接,直到端口解除绑定。 一旦成功接受连接, boss线程将接受的通道传递给NioServerSocketChannelFactory管理的工作线程之一

现在有些事情会有所改善

参见此处

凸台螺纹 每个绑定的ServerSocketChannel都有自己的boss线程

boss线程接受传入连接,直到端口解除绑定。 一旦成功接受连接, boss线程将接受的通道传递给NioServerSocketChannelFactory管理的工作线程之一

现在有些事情会有所改善


您可以在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);

工作线程将检查其任务队列并运行此新任务。

您可以在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并运行此新任务