对于部署标准模式verticle,vertx的架构如下:
对于部署worker模式verticle,vertx的架构如下:
- vertx的Acceptor EventloopGroup只有1个Acceptor Eventloop,即通过1个线程监听所有客户端的连接,连接建立后交给VertxEventLoopGroup处理。
- vertx可以把server(HttpServer,TcpServer,UdpServer)部署在多个verticle中,每个verticle共享这个server,server的连接监听在Acceptor Eventloop中,但读写事件的触发和处理都在VertxEventLoopGroup的eventloop中执行。
- 每部署1个verticle,都会为该verticle绑定1个event loop,这个eventloop是从VertxEventLoopGroup中按顺序取出的1个,该verticle中的io读写都在此eventloop中执行。
- 每部署1个verticle,都会为该verticle创建1个执行context(每个context都对应1个线程或执行器),传入的业务request handler都在此context对应的线程或执行器中执行。
- 对于标准模式的verticle,context对应的线程就是该verticle绑定的event loop的线程;对于worker模式的verticle,context对应的是worker线程池的执行器。因此,对于标准模式verticle,编解码handler、request handler都在绑定的eventloop中执行,但excuteBlocking方法会在worker线程池执行;对于worker模式verticle,编解码handler会在绑定的eventloop中执行,但request handler会在worker线程池的顺序执行器中执行。(注:request handler就是创建server时设置的业务处理handler)
- 当部署的verticle数量小于VertxEventLoopGroup的eventloop数量时,会造成部分event loop完全空闲;当部署的verticle数量大于VertxEventLoopGroup的eventloop数量时,多个verticle可能绑定同一个eventloop。