libprocess初探

libprocess介紹

一直在學習mesos相關的底層實現,mesos底層依賴還是挺多的,mesos就是其中的一個,而且是很重要的一部分。libprocess是受Erlang的啓發,基於actor模型進行開發的。libprocess的核心概念之一就是Process,Process就是一個單獨的線程,可以通過發送和接受http請求或者響應來與本地或者遠程的Process進行溝通。一個Process是一個actor,每一個Process對應一個事件的隊列,Process每次只處理一個事件。

函數介紹

dispatch

調用一個方法同步執行

delay

與dispatch類似,不同的是會在指定的某一個時間之後執行該方法

defer

Future 中註冊回調函數,其執行是同步的,也就是說會在完成任務(實現了 future)的那個線程執行,這有可能會阻塞。 defer 提供了一種機制,可以把回調函數異步地執行。

ID

用來產生PID

PID

爲Process提供一個間接的名字,避免使用一個指針

Futures and Promise

Future 和 Promise是用來確保能夠實現異步、非阻塞和高併發編程的。一個Future就是對函數執行結果的讀取,該函數會被異步的執行並返回,並且它是可以複製和賦值的;一個Promise就是一個寫的容器,其是不可複製和賦值的,目的是確保Process之間嚴格的所有權,因爲很難確定多個Process併發的處理Promise會發生什麼。

Future 和 Promise是有狀態的,主要分爲以下四個狀態:PENDING, READY, FAILED, DISCARDED,其中當Promise被創建的時候其是PENDING 狀態時,當你完成一個Promise的時候,其狀態是 READY

route

route是通過爲Process安裝一個路徑暴露出一個 http API,以方便多個Process之間進行交互。

get

通過設置url和UPID得到一個Future對象

post和requestDelete

post和requestDelete函數是向http服務發出一個請求,使用方式類似於get方法

clock management和timeout

異步程序通常使用超時,例如,因爲啓動異步操作的進程想要在一定時間限制內沒有完成操作時採取行動。爲了方便這一點,libprocess提供了一組簡化寫入超時邏輯的抽象。重要的是,測試代碼有能力操縱時鐘,以確保執行超時邏輯(不需要阻止測試程序,直到系統時間的適當時間過去)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章