thread-safety - vert.x 中的多实例 verticle 是线程安全的

标签 thread-safety vert.x

据我了解,在 vert.x 中,每次我们不需要在处理程序中编写线程安全性时,默认 Verticle 都会在同一事件循环中运行。

例如,如果我有一个运行 HttpServer 的 Verticle -

public class HttpServerVerticle extends AbstractVerticle {
@Override
public void start() throws Exception {
    vertx.createHttpServer().requestHandler(req -> {
        req.response().putHeader("content-type", "text/html").end(" 
    <html><body><h1>Hello from vert.x!</h1></body></html>");
    }).listen(8080);
}

}

保证在任何时候,我的请求处理程序都会在 2 个事件循环中被调用两次(针对 2 个不同的请求)。因此,我不必关心请求处理程序中的线程安全。

现在,如果我正在运行 HttpServer verticle 的多个实例 -

DeploymentOptions deploymentOptions = new 
        DeploymentOptions().setWorker(false).setInstances(10);

vertx.deployVerticle("com.....HttpServerVerticle", deploymentOptions);

我需要注意线程安全吗?多个请求处理程序(最大 = 10)可能会并行运行吗?

最佳答案

在这种情况下,您得到的是 10 个 verticle,HTTP 请求将以循环方式在这 10 个 verticle 之间分派(dispatch)。每个 verticle 将被分配给一个事件循环,您保持相同的线程安全保证。

关于thread-safety - vert.x 中的多实例 verticle 是线程安全的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54436144/

相关文章:

c# - FileShare.None 是否使线程等待文件流关闭?

c# - 以下帮助类线程安全吗?

java - java.util.HashSet 中的映射如何变为 null

groovy - vert.x:向所有路由注册failureHandler

scala - Vert.x - Scala 缺少什么?

java - 不兼容的类型 : Single<HttpServer> cannot be converted to Completable

java - 有效的不可变对象(immutable对象)有意义吗?

multithreading - 在不涉及先前数据计算的情况下更改变量是否是线程安全的?

rest - Quarkus 中的 MicroProfile Rest 客户端与 Vertx 客户端

java - 找不到 Maven 依赖模块