java - vert.x 如何是单线程的?

标签 java multithreading vert.x single-threaded singlethreadmodel

根据我的理解,每个 vert.x 实例都将被分配一个事件循环。事件循环处理该特定实例的所有请求和其他任务。我认为事件循环是一个线程。当部署了多个 vert.x 实例时,每个实例都有自己的事件循环,对吧?这意味着存在多个线程(multi-threading)。我是这样理解的。这个单线程的概念让我很头疼。任何帮助将不胜感激。

最佳答案

Vert.x 不像 node.js 那样是单线程的。 在 vert.x 中,你必须区分 Verticles 和 WorkerVerticles。一个 Vert.x 实例将创建多个事件循环(它们是线程),通常每个 CPU 核心一个。 Verticles 将被分配到一个事件循环,并且将始终由同一个线程执行,但前提是有工作要做。 WorkerVerticles 将被分配给来自工作池的线程,并且可以由不同的线程执行。 使用 Vert.x 进行编程的乐趣在于您可以“假装”它是单线程的。您不必关心并发性,因为您不能在 Verticle 之间共享变量。每个 Verticle 都在自己的类加载器中运行,您只能通过事件总线共享数据。 (还有一个共享 map ,但在这种情况下会让人分心。)

关于java - vert.x 如何是单线程的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23931208/

相关文章:

java - 使用 Gradle 在 Eclipse 中刷新快照依赖项

java - 从文件中读取输入并计算 Java 中的出现次数

java - 为什么大多数java.lang.reflect.Array类方法都是 'native'

c - mmap() 用于共享内存和线程

c - 将数据传递到多线程

multithreading - Node.js 数据处理分布

java - VertxexecuteBlocking 使用事件循环而不是工作线程

java - Gradle : Unable to initialize POM pom-default. xml:无法验证 POM

java - Maven/IntelliJ导入错误: io. vertx.core不存在

java - 在 Keycloak 中通过 refresh_token 刷新 access_token