Vert.x. 比 Node.js快好几倍?

同样是基于EDA事件驱动编程,Vert.x.竟然比Node.js快好几倍?来自Inside Vert.x. Comparison with Node.js. | Architects Zone一文测试如下:

下图是静态文件,差别更大

Vert.x分Java Ruby和Groovy几个版本,其中Vert.x.java似乎是最快的。

Event-based Programming Model
如同Node.js Vert.x提供一个事件驱动编程模型,使用Vert.x作为服务器时,程序员只要编写事件处理器event handler即可. 当TCP socket有数据时,event handler理解被创建调用,另外它还可以在以下几种情况激活: '当事件总线Event Bus接受到消息时,' '当接收到HTTP消息时,' 当一个连接断开时',' '当计时器超时时.'

Event Loops
Vert.x 内部有一个线程池. Vert.x会根据CPU核数匹配线程此的数目。

每个线程执行一个Event Loop. Event Loop能确保事件在循环中轮回. 例如,它会确证socket是否有数据可读事件,如果有, Vert.x 将调用相应的event handler 。

Message Passing
一个Vert.x中有很多 Verticles, Verticles之间使用事件总线Event Bus联系. Verticle类似 Erlang的actor模型.

Shared data
Message passing消息传递当然有用,但是它并不总是并发环境最好的,缓存受到普遍使用, Vert.x 提供一个分享的缓存Map.

面对Vert.x和Scala/Erlang的Actor以及扑面而来的EDA , Java领域王者Spring再也坐不住了,终于出手推出Reactor。

面对Vert.x 以及Erlang/Scala的Actor模型冲击,Spring今天最新宣布,推出基于事件驱动的异步应Reactor:

Reactor 是一个提供Java Groovy或其他JVM语言建立事件和数据驱动更容易的框架。它很快,可以每秒处理15,000,000以上事件,无堵塞non-blocking分发. 长任务运行无堵塞
项目:https://github.com/reactor/reactor.

Reactor 是受到著名的 Reactor设计模式(本站Reactor文章)影响,当然也受到EDA事件驱动实践的影响,Reactor目标是让EDA更加容易方便使用。

使用代码案例:


// Use a POJO as an event handler
class Service {
public <T> void handleEvent(Event<T> ev) {
// handle the event data
}
}

@Inject
Service service;

// Use a method reference to create a Consumer<Event<T>>
reactor.on($(
"parse"), service::handleEvent);

// Notify consumers of the 'parse' topic that data is ready
// by passing a Supplier<Event<T>> in the form of a lambda
reactor.notify(
"parse", () -> {
slurpNextEvent()
});


等Vert.x2.0出来后,试试结合Scala的效果。