当前位置: 首页 > 知识库问答 >
问题:

是的。对于单个垂直轴,x具有真正的并发性?

魏彦
2023-03-14

这个问题可能看起来像一个巨魔,但实际上是关于如何垂直。x管理并发性,因为verticle本身在专用线程中运行。

让我们看看这个简单的顶点。x用Java编写的http服务器:

import org.vertx.java.core.Handler;
import org.vertx.java.core.http.HttpServerRequest;
import org.vertx.java.platform.Verticle;

public class Server extends Verticle {
    html" target="_blank">public void start() {
        vertx.createHttpServer().requestHandler(new Handler<HttpServerRequest>() {
           public void handle(HttpServerRequest req) {
                req.response().end("Hello");
           }
        }).listen(8080);
    }
}

据我所知,这些文档中的整个文件都是垂直的。因此,在专用的垂直线程中调用start方法,到目前为止还不错。但是requestHandler在哪里被调用?如果在这个线程上调用它,我看不出它比节点更好。js。

我非常熟悉Netty,它是vert. x所基于的网络/并发库。每个传入的连接都映射到一个专用线程,该线程可以很好地扩展。那么...这是否意味着传入的连接也代表顶点?但是顶点实例“服务器”如何与这些客户端通信呢?事实上,我会说这个概念是有限的Node.js.

请帮助我正确理解这些概念!

问候你克里斯

共有3个答案

公孙琛
2023-03-14

正如您正确回答自己的那样,vertex确实使用异步非阻塞编程(如node.js),因此您无法执行阻塞操作,因为否则会阻止整个(应用程序)世界的运转。

您可以按照正确的说明扩展服务器,方法是生成更多(n=CPU核心)垂直实例,每个实例都尝试在同一TCP/HTTP端口上侦听。

与节点相比,它在哪里发光。js是因为JVM本身是多线程的,这给了您更多的优势(从运行时的角度来看,不包括Java的类型安全性等):

  • 多线程(跨顶点)通信,虽然仍然被限制为线程安全的类似Actor的模型,但不需要IPC(进程间通信)在顶点之间传递消息——一切都发生在同一个进程、同一个内存区域内。这比node.js在新系统进程中生成每个分叉任务并使用IPC进行通信更快
  • 能够在同一个JVM进程中执行计算繁重和/或阻塞任务:http://vertx.io/docs/vertx-core/java/#blocking_code或http://vertx.io/docs/vertx-core/java/#worker_verticles
  • 与V8相比HotSpot JVM的速度:)
刁冠宇
2023-03-14

每个垂直轴都是单线程的,启动时vertx子系统会为该垂直轴分配一个事件循环。垂直循环中的每个代码都将在该事件循环中执行。下次你应该在课堂上提问http://groups.google.com/forum/#!论坛/vertx,小组非常活跃,您的问题很可能会立即得到回答。

邹星火
2023-03-14

我和一个和vert有很大关系的人谈过。他告诉我,关于“并发性”问题,我基本上是对的。

但是:他给我看了文档中的一个部分,我完全没有看到其中对“扩展服务器”的详细解释。

基本概念是,当你写一个垂直的时候,你只有单核心的性能。但是可以启动垂直。使用-instance参数的x平台,该参数定义一个给定垂直体的运行实例数。垂直。x在引擎盖下做了一点魔术,这样我的服务器的10个实例就不会试图打开10个服务器套接字,而是打开一个。往这边走。即使对于单个垂直轴,x也可以水平伸缩。

这真是一个伟大的概念,尤其是一个伟大的框架!!

 类似资料:
  • 我正在尝试为Vert开发概念验证。一款简单的实时浏览器游戏。 让我们想象一个类似于在线扑克的游戏——你有一个大厅,里面有许多你可以加入的现有游戏。你也可以创建一个新游戏(所以大厅里的游戏数量是可变的)。在这之前,你有一个异步超文本传输协议服务器(集群),玩家可以连接到它。尤其是在特定的游戏中,一切都是实时的,所以当玩家执行某个操作时,其他人会立即看到它,而无需刷新或定期ajax轮询。 我在考虑如何

  • 我对Vert.x非常陌生,就像几天前一样。我来自一个JAX式的,安逸的世界。我可能大错特错,请指正。 我的问题是:如何使顶点公开自己的REST接口(子路由器),以及如何将其子路由器注册到应用程序的主路由器中? 我尝试过类似的东西,但是当我请求/产品/所有:( } }

  • 问题内容: 如何在HTML中创建垂直表?垂直是指行将是垂直的,并且表头在左侧。 我还需要这种方式,以便可以像使用普通表一样访问这些行(在这种情况下为垂直)。这是因为我动态地获取了一行的数据(例如A行)并将其插入到表中。我正在使用angularJS来避免DOM操作,因此我没有在寻找使用Javascript 进行复杂的DOM操作。 问题答案:

  • 我的vertx(4.0.2)应用程序是用Java(11)编写的,它使用了一些数据量大的垂直项,这些垂直项会导致延迟峰值,因为eventloop会被它们阻塞一段时间。出于这个原因,我想将这些垂直链接部署为工作垂直链接,这样eventloop和其他垂直链接就不再被阻塞。 不幸的是,我的应用程序现在崩溃了,因为顶点内的事件处理是由多个线程并发执行的;( 如果我正确理解vertx文档,则不应发生这种情况:

  • 我知道,在vert. x中,默认的版本将在每次我们不需要在处理程序中写入线程安全时运行在相同的事件循环中。 例如,如果我有一个运行HttpServer的版本- } 可以保证,在任何时候,我的请求处理程序都会在两个事件循环上被调用两次(针对2个不同的请求)。因此,我不必在请求处理程序中处理线程安全问题。 如果我运行多个HttpServer顶点实例- 我需要注意线程安全吗?多个请求处理程序(最大值=1

  • 我不太明白vert. x是如何应用于网络服务器的。 我所知道的webserver的概念是基于线程的。 启动Web服务器,然后该服务器正在运行 然后,对于每个连接的客户端,您都会得到一个套接字,然后将其传递给自己的线程处理程序 然后线程处理程序处理该特定套接字的任务 因此,可以清楚地定义哪个线程为哪个套接字执行工作。然而,对于每个套接字,您都需要一个新线程,从长远来看,对于许多套接字来说,这是非常昂