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

Vertx扩展每个线程的实例数

萧越泽
2023-03-14
问题内容

Vert.x是用于在JVM上构建响应式应用程序的工具包。

我想对基于JVM的自动可伸缩RESTful后端API使用vertx。

到目前为止,我从文档中发现,默认情况下,它需要计算机中的内核数,假设您有N个内核并为每个内核创建N个线程,每个线程是一个事件总线,每个线程包含vertx实例。问题是,Vertx如何控制实例数量?基于负载压力?

关于控制通过给定线程运行的Verticles数量的问题我仍然没有得到。请帮助清除此问题。假设计算机具有4个核心,并且我编写了两个扩展为AbstractVerticle的类:

1)让我们成为一些DB数据检索器(我们将其称为RETRIEVER或“ R”)

2)再说一个转换器(我们称其为CONVERTER或“ C”)

现在,我使用vertx运行或编译并运行:

$ java -jar检索器.jar

$ java -jar converter.jar

因此,由于我们有4个核心,因此Vertx在启动时将为每个核心创建4个线程。

问题#1:

默认情况下,每个线程中有多少个检索器和转换器实例?我猜每个线程一个实例吗?对?因此,我们总共有4个核心的4个实例实例和4个实例。转换器?正确?

问题2:

如果负载压力随着对RETRIEVER(“ R”)和COVERTER(“
C”)的调用次数的增加(从1.000到1.000.000调用)而增加,Vertx将自动管理“ R”和“ C”实例的数量需要处理增加到我们系统的呼叫数量?

Jordan
Halterman建议:“还请注意,您可以跨多个垂直实例扩展HTTP服务器以处理更多请求。在这种情况下,您可以使用静态变量或共享数据在各个实例之间共享信号量。”

问题3:

但是,如何精确地缩放您的verticle实例以处理更多请求?我在文档中找不到这个。

预先感谢您!


问题答案:

您误解了文档。

首先,只有一个事件总线(当以群集模式启动Vert.x时,它在Vert.x实例之间共享)。它的作用是允许消息在您的顶点之间传递通信方式。

请参阅事件总线部分。

然后在Vert.x中有不同类型的线程:事件循环线程和辅助线程。默认情况下,Vert.x创建的事件循环线程与计算机上的内核一样多,并包含20个工作线程。事件循环线程用于处理异步事件(已读取文件缓冲区,已接收消息等)。辅助线程用于执行应用程序的阻塞部分。

请参阅多反应器模式,黄金法则和运行阻塞代码

顶点是Vert.x部署单元。共有三种类型的顶点,但您应该知道的两种是“标准”顶点和“工人”顶点。部署标准顶点时为其分配单个事件循环线程。您在顶点中处理的任何类型的事件都将由此单个事件循环线程处理。保证工作线程顶点一次由一个工作线程执行。每次可能不是同一工作线程,但是永远不会有两个工作线程并行处理工作线程事件。

参见顶点

最终,要扩展Vert.x应用程序,您将部署多个顶点实例。对于标准verticle,每个实例将分配一个不同的事件循环,因此您可以跨内核扩展。

请参见顶点实例数

Vert.x不会自动为您调整Verticles的数量。不过,您可以使用Vert.x监视工具来构建它。

我相信这可以回答您的三个问题。



 类似资料:
  • 维特。x是在JVM上构建反应式应用程序的工具包。 我想将vertx用于基于JVM的自动可伸缩RESTful后端API。 到目前为止,我从留档中发现,默认情况下,它需要机器中的内核数量,假设您有N个内核,并为每个内核创建N个线程,每个线程是一个事件总线,每个线程包含vertx实例。问题是,Vertx如何控制实例数量?基于负载压力? 关于控制在给定线程中运行的垂直线的数量,我仍然不明白。请帮我弄清楚这

  • 扩展说明 服务提供方线程池实现策略,当服务器收到一个请求时,需要在线程池中创建一个线程去执行服务提供方业务逻辑。 扩展接口 org.apache.dubbo.common.threadpool.ThreadPool 扩展配置 <dubbo:protocol threadpool="xxx" /> <!-- 缺省值设置,当<dubbo:protocol>没有配置threadpool时,使用此配置 -

  • 问题内容: 为什么实现Runnable比从Thread类扩展更好的选择? 问题答案: 这样,您就可以 将 计算( what )与执行( when 和/或 how )分离。 使用或,您可以例如向提交许多工作/计算,这将使您计划工作。这是ExecutorService的摘录形式: 与直接使用线程相比,使用/ 给您更大的灵活性。

  • 我需要编写一个扩展Thread类的应用程序。我的类在实例化时接受一个整数(即100)<代码>(MyThread myt=新的MyThread(100);) 这个整数将是这个类循环并打印消息的次数。消息应该是“线程正在运行…100”。100将是我传入构造函数的任何数字。如果数字是150,那么输出应该是“线程正在运行…100”。我应该使用main方法来测试这个类。在主线程中,我将启动两个线程,一个线程

  • 问题内容: servlet类有多个实例吗?当我听到“每个servlet实例”时,有人可以详细说明吗? 问题答案: Servlet容器启动时,它: 读; 在类路径中找到已声明的Servlet;和 加载和实例化每个Servlet一次。 大概是这样的: 这些Servlet都存储在内存中,并且每次请求URL与Servlet的关联的匹配时都可以重用url-pattern。然后,Servlet容器执行类似于以

  • 我是vert的新手。x、 我在尝试垂直。x“NetServer”功能。http://vertx.io/core_manual_java.html#writing-tcp服务器和客户端,它的工作方式很有魅力。 然而,我也读到“verticle实例严格来说是单线程的。 如果您创建一个简单的TCP服务器并部署它的单个实例,那么该服务器的所有处理程序始终在同一个事件循环(线程)上执行。” 目前,对于我的实