vertx的Actor模型實現

前言

image

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 如圖:安全

image

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->{...} 相同效果.

 

調度框圖

 

時序圖

image

Multi instances Verticle Structure

image

相關文章
相關標籤/搜索