web世界中的线程, 请参考
MDN: Web Worker
整体架构
![](https://img.haomeiwen.com/i11224388/c48187b3b37871c9.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: 如果为真时,表示调用结果
网友评论