scratch-vm之线程间通信(dispatch system)

整体架构

scratch-vm之线程间通信(dispatch system)_第1张图片
image.png
scratch-vm之线程间通信(dispatch system)_第2张图片
image.png

scratch-vm中实现了一套简单巧妙的“线程间”通信机制,帮助管理多个service,并承担service和caller的消息通信。CentralDispatch运行在主线程中,WorkerDispatch运行在Worker中。

CentralDispatch(全局唯一单例)

作为service center,通过service的主动注册(setService(service))保存&管理多个service。
作为worker center,addWorker(worker)作为入口,将worker增加到dispatch system。
作为message broker,转发service与worker之间的消息和调用。

WorkerDispatch(每个worker会包含一个WorkerDispatch对象)

worker中引入WorkerDispatch,为worker提供了onmessage函数。
将worker通过CentralDispatch.setService,将worker注册到CentralDispatch。

消息格式

DispatchCallMessage(函数调用)

responseId: 消息的序列id,当调用的函数结束时,会返回DispatchResponseMessage,会包含这个responseId,标识具体的某一个调用,封装在dispatch system内部,调用者不需要关心。
service: 目标service的名字
method: 目标service的函数名字
args: 参数

DispatchResponseMessage(调用返回)

responseId: 参考** DispatchCallMessage**
error: 如果为真时,表示调用错误信息
result: 如果为真时,表示调用结果

你可能感兴趣的:(scratch-vm之线程间通信(dispatch system))