vert.x是否在分配给同一事件循环的Verticle之间提供公平的调度?

时间:2015-03-27 10:47:20

标签: vert.x

有人知道vert.x如何处理以下情况?

  • 考虑分配给同一事件循环的Verticle A和Verticle B
  • Verticle A接收100万个cpu绑定事件以进行处理
  • 此Verticle B收到1个cpu绑定事件后。

Verticle B执行会等待A的所有队列完成吗?

文档不清楚这方面。

以下是文档摘录:http://vertx.io/manual.html#event-loops

  

部署标准Verticle实例时,服务器会选择   将分配给该实例的事件循环。任何后续的   将始终使用该实例调度该实例要完成的工作   确切的线程。当然,因为可能有数千个   在任何时候运行的Verticle,单个事件循环都将是   同时分配给许多Verticle。

     

我们称之为多反应堆模式。这就像反应堆模式   但是有不止一个事件循环。

谢谢, 米哈伊

2 个答案:

答案 0 :(得分:3)

Vert.x事件循环是来自Netty的NioEventLoop。事件循环线程要执行的任务在MpscLinkedQueue中排队,这是一个单一消费者/多生产者队列。

这意味着计划执行的任务按照提交的顺序进行处理。

但是,如果有多个Verticle实例(它们都是相同事件的可能消费者),则应用循环调度以在消费者之间平均分配传入事件。

答案 1 :(得分:0)

我不会谈论“cpu事件”,而是关于一般事件。 如果两个Verticle都被分配到同一个事件循环,并且事件按照您说它们将以这种方式执行的顺序排队 - 没有事件优先级:事件按它们在队列中的顺序处理。

然而,这种情况非常不可能,而且vert.x中的重要事情是每个处理程序都不会阻塞事件循环 - 理想情况下,每个Verticle / handler应该花费很少的cpu时间来保持平台的正常运行

HTH,
卡罗