對(duì)于部署標(biāo)準(zhǔn)模式verticle,vertx的架構(gòu)如下:

standard verticle架構(gòu).png
對(duì)于部署worker模式verticle,vertx的架構(gòu)如下:

worker verticle架構(gòu).png
- vertx的Acceptor EventloopGroup只有1個(gè)Acceptor Eventloop,即通過(guò)1個(gè)線程監(jiān)聽所有客戶端的連接,連接建立后交給VertxEventLoopGroup處理。
- vertx可以把server(HttpServer,TcpServer,UdpServer)部署在多個(gè)verticle中,每個(gè)verticle共享這個(gè)server,server的連接監(jiān)聽在Acceptor Eventloop中,但讀寫事件的觸發(fā)和處理都在VertxEventLoopGroup的eventloop中執(zhí)行。
- 每部署1個(gè)verticle,都會(huì)為該verticle綁定1個(gè)event loop,這個(gè)eventloop是從VertxEventLoopGroup中按順序取出的1個(gè),該verticle中的io讀寫都在此eventloop中執(zhí)行。
- 每部署1個(gè)verticle,都會(huì)為該verticle創(chuàng)建1個(gè)執(zhí)行context(每個(gè)context都對(duì)應(yīng)1個(gè)線程或執(zhí)行器),傳入的業(yè)務(wù)request handler都在此context對(duì)應(yīng)的線程或執(zhí)行器中執(zhí)行。
- 對(duì)于標(biāo)準(zhǔn)模式的verticle,context對(duì)應(yīng)的線程就是該verticle綁定的event loop的線程;對(duì)于worker模式的verticle,context對(duì)應(yīng)的是worker線程池的執(zhí)行器。因此,對(duì)于標(biāo)準(zhǔn)模式verticle,編解碼handler、request handler都在綁定的eventloop中執(zhí)行,但excuteBlocking方法會(huì)在worker線程池執(zhí)行;對(duì)于worker模式verticle,編解碼handler會(huì)在綁定的eventloop中執(zhí)行,但request handler會(huì)在worker線程池的順序執(zhí)行器中執(zhí)行。(注:request handler就是創(chuàng)建server時(shí)設(shè)置的業(yè)務(wù)處理handler)
- 當(dāng)部署的verticle數(shù)量小于VertxEventLoopGroup的eventloop數(shù)量時(shí),會(huì)造成部分event loop完全空閑;當(dāng)部署的verticle數(shù)量大于VertxEventLoopGroup的eventloop數(shù)量時(shí),多個(gè)verticle可能綁定同一個(gè)eventloop。