Verticle类型

有三种不同类型的 verticles:

标准 Verticles

这些都是最常见和最有用的类型 — — 他们总是使用事件循环线程执行。更多讨论在下一节。

Worker Verticles

一个实例是永远不会有多个线程并发执行。

多线程的worker verticles

一个实例可以由多个线程同时执行。

标准 verticles

标准verticles当创建和调用start方法时分配一个event loop。调用执行都在相同的event loop上。

这意味着我们可以保证您的verticles实例中的所有代码总是都执行相同的事件循环上 (只要你不调用它自己创建的线程!)。

这意味着可以在程序里作为单线程编写所有的代码,把担心线程和扩展的问题交给Vert.x。没有更多令人担忧的同步和更多不稳定的问题,也避免了多线程死锁的问题。

Worker verticles

Worker verticles就像标准的verticles一样,但不使用事件循环执行,从 Vert.x worker线程池使用一个线程。

worker verticles 专为调用阻塞的代码,因为他们不会阻止任何事件循环。

如果你不想使用worker verticles运行阻塞的代码,可以在事件循环上直接运行内联阻塞代码。

如果您要以worker verticles的方式部署verticle,需要调用 setWorker.

  1. DeploymentOptions options = new DeploymentOptions().setWorker(true);
  2. vertx.deployVerticle("com.mycompany.MyOrderProcessorVerticle", options);

Worker verticle实例永远不会有多个线程并发执行 ,但可以在不同的时间由不同的线程执行。

多线程Worker verticles

多线程的worker verticle就像正常worker verticle,但它是可以由不同的线程同时执行。

警告!
多线程的worker verticle 是一项高级的功能,大多数应用程序会对他们来说没有必要。因为在这些 verticles 并发,你必须非常小心,使用标准的 Java 技术的多线程编程,以保持verticle一致状态。