note: Context 與 EventLoop 關係 1 : N ; 每次建立一個vericles或者multi instances 經過EventLoopGroup.next挑出一個EventLoop,因此是1:N關係; context <=> verticle. 總結: 1.verticle和multi Instances總和不超過EventLoopSize,multi verticle在同一個EventLoop的 Thread上運行加大負擔,若是形成線程阻塞會影響延時任務(Timer,Periodic)的進行和任務事件堆積過大; 2.verticle中通常能夠不用考慮線程(單線程)安全問題,除了定義static variable、static block、 static method外,verticle之間經過EventBus通訊,極端狀況本地的verticle之間經過共享內存通訊效果更好. 3.每創建一個verticle會根據 setting verticle Type 創建context instance , 因此create verticles size > EventloopSize , 那麼一個Eventloop就會執行 multi verticle handlers.
Context Class diagram 如圖:安全
Verticle Types:oop
Verticle Types : 1、Standard Verticles、2、Worker Verticles、3、Multi-threaded worker verticles. 本質仍是eventloop處理connection、read/write、encode/decode 等等, 事件處理(EventHandler)的邏輯 就在 setting verticle type 處理(Thread), 調度邏輯在VertxHandler類配置的context調度, 和vertx.executeBlocking->{...} 相同效果.