当前位置: 首页 > 面试题库 >

Netty如何使用线程池?

吴宏扬
2023-03-14
问题内容

您能解释一下Netty如何使用线程池工作吗?我是否正确理解,线程池有两种:老板线程和工人线程。老板用于执行I /
O,而worker用于调用用户回调(messageReceived)来处理数据?


问题答案:

这是来自NioServerSocketChannelFactory文档

一个ServerSocketChannelFactory,它创建一个基于NIO的服务器端ServerSocketChannel。它利用NIO引入的非阻塞I
/ O模式来有效地服务许多并发连接。

线程如何工作
NioServerSocketChannelFactory中有两种类型的线程:一个是老板线程,另一个是工作线程。

老板线程

每个绑定的ServerSocketChannel都有自己的老板线程。例如,如果您打开了两个服务器端口(例如80和443),则将有两个老板线程。Boss线程接受传入的连接,直到未绑定端口。一旦成功接受了连接,老板线程就将接受的Channel传递给NioServerSocketChannelFactory管理的工作线程之一。

工作线程
一个NioServerSocketChannelFactory可以具有一个或多个工作线程。工作线程以非阻塞模式对一个或多个通道执行非阻塞读写。

在Nio模型中,bossThread照顾所有有界套接字(监听套接字),workerThread照顾Accepted-
socket(包括IO和调用messageMethod等接收事件的方法)。



 类似资料:
  • 我试图使用Netty 4.0.8创建一个相当简单的WebSocket服务器。我有基本的握手设置和工作。但是从一个单独的线程发送的消息似乎没有传到客户端。 客户机/服务器交互的工作方式是,客户机启动连接,然后通过WebSocket发送初始消息(“hello”)。服务器立即响应。此消息通过Chrome开发工具传递并可见。写入此消息后,我将存储在中。此初始化如下: 然后添加,如下所示: 在单独的线程(在

  • 我有一个需要执行一些业务逻辑的处理程序,我希望它在单独的线程池中执行,以不阻塞io事件循环。我已将DefaultEventExecutorGroup添加到管道中,如http://netty.io/4.0/api/io/netty/channel/ChannelPipeline.htmljavadoc和http://netty.io/wiki/new-and-noteworthy-in-4.0.ht

  • 问题内容: 我正在尝试的代码 我们如何根据其ID暂停/暂停线程?Thread.suspend已过时,必须有一些替代方法来实现。我有线程ID,我想挂起并杀死线程。 编辑:我用这个。 但是我无法停止该线程。 问题答案: 这些天杀死线程的正确方法就是使用它。这集真和原因,以及一些其他的方法来扔。 在线程代码内部,您应该执行类似以下的操作,检查以确保它没有被中断。 这是一个如何在线程内部处理中断异常的示例

  • 根据该条:https://quarkus.io/blog/resteasy-reactive-smart-dispatch/我应该能够通过使用“just”注释方法来使用I/O线程。 当使用最新的夸克快速入门并修改入门示例时: 我希望为方法获得一个I/O线程。然而,结果是: 因此,在这两种情况下(根据vert.x-worker-thread),都是一个工作线程,而不是I/O线程。 QUUKUS版本是

  • 顶点似乎只由单个线程执行,并且总是由同一个线程执行。但是Vert. x能够通过每个CPU创建一个线程来使用机器中的所有CPU。每个线程可以向多个顶点发送消息。 但在性能测试期间,在标准verticle上评测Vertex http服务器时,我只能看到一个线程处理所有处理(vert.x-eventloop-thread-0)。 我该怎么做才能让我的8个事件循环线程都处理到verticle的消息?

  • 我需要创建一个并行执行多个操作的应用程序。我曾考虑过使用线程或线程池,但我以前从未使用过,所以我发现这相当困难。Thread应按以下方式工作: 所有系统应同时运行。你认为我应该如何实现这一点?