Java 在Vert.x中加载非线程安全的本机库:多实例Verticle是否仅限于其自己的进程

Java 在Vert.x中加载非线程安全的本机库:多实例Verticle是否仅限于其自己的进程,java,concurrency,java-native-interface,vert.x,vertx-verticle,Java,Concurrency,Java Native Interface,Vert.x,Vertx Verticle,我想写一个使用GraphViz渲染图形的垂直图。我希望通过将本机(共享)libs加载到我的JVM中并通过JNI调用它来实现这一点。现在,GraphViz本身不是线程安全的。仅在各自的线程中运行每个多实例垂直体是不够的,我还必须确保每个垂直体都有自己的本机代码实例,或者换句话说,每个垂直体都在单独的进程中运行,每个进程都使用一个内核 对Vert.x的大多数描述都说只讨论线程之间的隔离(不共享数据等),我对进程隔离一无所知 基本上,我正在寻找一个框架来创建REST服务器的两个实例,所有实例都在同一个

我想写一个使用GraphViz渲染图形的垂直图。我希望通过将本机(共享)libs加载到我的JVM中并通过JNI调用它来实现这一点。现在,GraphViz本身不是线程安全的。仅在各自的线程中运行每个多实例垂直体是不够的,我还必须确保每个垂直体都有自己的本机代码实例,或者换句话说,每个垂直体都在单独的进程中运行,每个进程都使用一个内核

对Vert.x的大多数描述都说只讨论线程之间的隔离(不共享数据等),我对进程隔离一无所知

基本上,我正在寻找一个框架来创建REST服务器的两个实例,所有实例都在同一个套接字上侦听,或者前面有一个负载平衡器,而不必自己编写任何代码。PM2对Node.js的作用。我可以用Vert.x来做吗

我意识到这可能违背了Vert.x的精神,正如核心文档所表明的:

每个Vertx实例维护多个事件循环,而不是单个事件循环。默认情况下,我们根据机器上可用的内核数量选择该数量,但这可以被覆盖

这意味着与Node.js不同,单个Vertx进程可以在您的服务器上扩展

但是,由于我使用的是本机库,每个JVM只能加载一次,而且在我的情况下不能并发执行,因此无法扩展到多个核心,所以我想我确实需要Node.js模式,仅在Java中使用


我的要求也比集群事件总线文档中描述的要简单得多,例如。G是的,因为我不需要实例之间的通信。

您只能部署一个处理
GraphViz
的verticle实例,并使用EventBus与之通信。@AlexeySohin但只有一个实例会将我的图形处理限制在一个核心上。看看预期的请求数量和图形呈现时间,我肯定需要更多。你可以缩放机器,而不是工人(垂直)。大多数技术都是这样做的:它可以将点作为可执行文件调用。