vertx verticle实例令人困惑

时间:2014-08-25 10:51:24

标签: asynchronous vert.x

我被vertx实例搞糊涂了。第一次看到文档时,我认为实例意味着事件循环线程的数量 当我深入研究源代码(vertx 2.1.2)时,我发现Verticle实例意味着事件循环线程组中的任务。事件循环线程总是等待选择器并运行任务。

然后第一个问题来了:

是否需要在vertx中有Verticle实例?由于vertcle只运行一次事件循环。更确切地说,事件循环线程运行Verticle start 方法并将其抛弃,它就像一个条目一样,就是这样。

我的第二个问题是:

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

脚本
  1. 使用相同的处理程序实例
  2. 在事件总线上发送多个查询
  3. 处理程序等待每个回调并修改标志
  4. 如果旗帜到达线头,做一些工作
  5. 问题

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

    任何解决方案都将得到解决。

1 个答案:

答案 0 :(得分:0)

  

是否需要在vertx中有Verticle实例?

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

  

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

     

问题

     

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

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