Don’t block me!

With very few exceptions (i.e. some file system operations ending in ‘Sync’), Vert.x中的API方法都不会阻塞该该方法的执行线程。

如果结果能够直接返回的话,那么你可以直接获得该结果进行后续处理,否则你需要提供一个handler,等结果正式产生之后再处理该结果。

因为Vert.x API不会阻塞任何线程,因此你可以使用少量的线程来处理非常大的并发量

在传统的阻塞API中,下面的操作会阻塞住当前的调用线程

  • 从socket中读取数据
  • 向磁盘中写入数据
  • 向远端发送一条消息,同时等待消息返回
  • … Many other situations

在上面的例子中,当你的线程等待一个结果时,这个线程就不能再做其他的任何事,这是非常低效的。

译者注: 也许你会说这个线程被阻塞了,但是还有其他的线程可以工作啊,但是首先我们的目标是用少量地线程做大量的工作,当我们引入更多线程首先与我们的目标不符合,再有更多的线程会消耗更多的内存和更多的线程上下文切换操作

这意味着,如果你想要使用阻塞API进行大量并发操作,你需要非常多的线程以避免你的应用程序慢慢停止掉。

For the levels of concurrency required in many modern applications, a blocking approach just doesn’t scale.