【发布时间】:2023-02-09 07:19:48
【问题描述】:
我知道这个问题已经被问过了,但我认为它从来没有得到一个准确的答案。
Vert.x 能否在单个 Vert.x 上运行同一个 Verticle 的多个实例,这意味着单个 Verticle 可以在多个事件循环上运行?如果是这种情况,每个事件循环是否运行相同的处理程序实例或单独的处理程序实例,换句话说,同一个 Verticle 的多个实例是线程安全的并且不共享任何状态,或者是否存在并发问题?
根据 Vert.x 文档 -
即使 Vertx 实例维护多个事件循环,任何 特定的处理程序永远不会并发执行,并且在大多数情况下 cases(worker verticles除外)总是会被调用 使用完全相同的事件循环。
很难准确地说出它们的意思。
我试图弄清楚 Actor 模型和 Vert.x 在并发性和映射到线程方面的比较。到目前为止,Vert.x 似乎像 Actors 一样工作,其中 Verticle 是分配给单个线程的一组 Actors,可能唯一的区别是在 Vert.x 中,一段代码可以在其他地方同时运行(在同一个 Vert.x 上) ) 尽管可能作为具有自己状态的单独实例,但严格禁止使用 Actors,除非您将 Actor 复制为单独的类,然后它是相同的。
更新:似乎在单独的事件循环上运行的实例之间存在完全隔离的状态,因为每个实例都运行通过单独的类加载器加载的自己的实例,因此甚至不共享静态变量。
【问题讨论】:
标签: concurrency thread-safety vert.x actor