美文网首页
scratch-vm之线程间通信(dispatch system

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

作者: M老师 | 来源:发表于2018-03-30 12:20 被阅读0次

web世界中的线程, 请参考MDN: Web Worker

整体架构

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: 如果为真时,表示调用结果

Dispatch System实现

相关文章

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

    web世界中的线程, 请参考MDN: Web Worker 整体架构 scratch-vm中实现了一套简单巧妙的“...

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

    整体架构 scratch-vm中实现了一套简单巧妙的“线程间”通信机制,帮助管理多个service,并承担serv...

  • 多线程的应用场景

    GCD线程间通信 //0.获取一个全局的队列 dispatch_queue_tqueue=dispatch_get...

  • 面试题

    线程间通信 当使用dispath-async函数开辟线程执行任务的完成时,我们需要使用dispatch_async...

  • iOS开发之线程间的MachPort通信与子线程中的Notifi

    iOS开发之线程间的MachPort通信与子线程中的Notification转发 iOS开发之线程间的MachPo...

  • ios 多线程的故事4

    线程间通信 线程间通信:在1个进程中,线程往往不是孤立存在的,多个线程之间需要经常进行通信 线程间通信的体现 1个...

  • iOS 多线程-GCD

    本文内容任务、队列的概念、创建方式任务 + 队列的6种组合的执行方式线程间如何通信dispatch_once、di...

  • Android 面试常问知识

    Q1:线程间的通信进程间通信的几种方式进程间通信方式详解Q2:线程安全SharePreferences 是否线程安...

  • iOS进程间通信

    线程间通信 :通过performSelector系列的方法 可以实现 各种线程间的通信(通信 :调用与传参)进程间...

  • 线程间通信

    线程间通信就是子线程和主线程之间的通信

网友评论

      本文标题:scratch-vm之线程间通信(dispatch system

      本文链接:https://www.haomeiwen.com/subject/xxkvcftx.html