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提供了一组简化写入超时逻辑的抽象。重要的是,测试代码有能力操纵时钟,以确保执行超时逻辑(不需要阻止测试程序,直到系统时间的适当时间过去)。