【问题标题】:vertx verticle instance confusingvertx 垂直实例令人困惑
【发布时间】:2014-08-25 10:51:24
【问题描述】:

我对 vertx 实例感到困惑。第一次看到文档,我认为实例意味着事件循环线程的数量。
当我深入研究源代码(vertx 2.1.2)时,我发现 verticle 实例意味着事件循环线程组中的一个任务。事件循环线程始终等待选择器并运行任务。

那么第一个问题来了:

是否有必要在 vertx 中有 verticle 实例? 因为 vertcle 只在一个事件循环中运行一次。更准确地说,事件循环线程运行 Verticle start 方法并将其丢弃,它就像一个条目一样工作,仅此而已。

我的第二个问题是:

如何收集多个事件的结果?

设想
  1. 使用同一处理程序实例在事件总线上发送多个查询
  2. 处理程序等待每个回调并修改标志
  3. 如果标志到达线程保持,做一些工作
问题

当多个事件回调时,有可能多个事件循环线程将执行处理程序,因此存在作业将多次运行的竞争条件。如何避免?

任何解决方案都会得到认可。

【问题讨论】:

    标签: asynchronous vert.x


    【解决方案1】:

    vertx 中是否需要有 verticle 实例?

    没有。这不是必需的。您不必创建 Verticle 类的任何实例。

    如何收集多个事件的结果?

    问题

    当多个事件回调时,有可能多个事件循环线程将执行处理程序,因此存在作业将多次运行的竞争条件。如何避免?

    通过事件总线发送的每个查询都会有一个对应的 Handler 对象。它们不会共享同一个 Handler 实例。对于查询的每个响应,都会调用相应的 Handler 对象的 handle() 方法。因此,在特定的 Handler 对象上没有竞争条件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 2022-01-17
      • 2012-01-02
      • 1970-01-01
      • 1970-01-01
      • 2018-02-26
      • 2012-05-15
      • 1970-01-01
      相关资源
      最近更新 更多