多线程Javascript解释器的大致架构

    由于一个完整的解释器类似Google V8的解释器需要的工作量非常的大如需要实现如下的模块:

    词法分析,语法分析器,AST转Byte模块,解释执行模块和JIT模块,当然也包括了垃圾回收模块和全局控制器模块, 而JIT模块需要对不同平台进行细分具体有IA32, ARM 两个平台的实现.

    所以这个解释器在实现的模块上虽然也和其他解释器相同,但是不包括垃圾回收模块和JIT模块. 但是包括了一个多线程模块,用来扩展Javascript的多线程能力,功能类似与Java的线程模型,具有synchronized和Thread类.

    该解释器的基本架构如下图:

    1. Lex+Parse模块是通过输入String或者一个Stream来获得一个组织完成的AST中间表示, 如果中间出现错误,则可以进行提示.

    2. EVAL模块是根据ECMAScript-262 3th Edition中10-15章的算法描述组织的解释执行模块.

3. VM模块是该软件的总控模块,每一个VM持有一个Global全局对象池,而通过共享Global对象池,实现同进程中不同线程的资源共享。

      3.1 其中Engine代表了具体某个执行的线程表示, 而Context代表了上下文,同一个Engine下的Context需要竞争Engine来获得调用EVAL的功能.

    4. Util模块中包括了Node等常用的数据结构, 来支持整个软件.

如下是该解释器和系统之间通信模式:

组件解析:

   1. File.js :具体的某个脚本

   2. 词法分析: Javascript引擎的词法分析部分, 把File.js 中的字符流进行归类到某个Token, 如function关键字使用tFUNCTION 这个Token表示该意思, 并且把词法分析独立出来有利于对部分输入源的解耦, 如String输入流,File输入流等不同的输入方式。

    3. 语法分析: 将词法分析得到的Token根据具体的ECMAScript语法构建AST(抽象语法树)

4. 虚拟机: 使用AST, 结合Javascript语言的具体机制来完成对AST的具体解释运行, 在运行过程中, 会使用到各个对象来完成I/O操作, 如File对象, Socket对象等, 并且通过这些对象完成了对脚本语言和操作系统的联系,使得Javascript能够在Server上运行任务。

5. Host对象: 操作系统相关的对象, 如File 它代表了具体某个文件的基本信息(大小, 可读属性, 是否已经被打开,用户权限等), Socket它代表了操作系统的socket操作(建立TCP连接, 发送字节流, 接受字节流,关闭一个连接等)

6. 内部对象: 提供基本型的对象类型, 如语言中经常使用的String类型以及它的相关操作(substr, charAt)等等.

上述的基本架构就是本次项目的基本介绍, 具体的设计会结合现在已经存在的标准建立。

而选用Linux平台作为运行环境(Linux 有免费的编译环境 ~~)

   https://github.com/darkgem/js-engine

转载于:https://www.cnblogs.com/tickobject/p/3587795.html

Javascript多线程引擎(二)相关推荐

  1. Web Worker javascript多线程编程(一)

    什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript ...

  2. JavaScript 对引擎、运行时、调用堆栈的概述理解

    JavaScript 对引擎.运行时.调用堆栈的概述理解  随着JavaScript越来越流行,越来越多的团队广泛的把JavaScript应用到前端.后台.hybrid 应用.嵌入式等等领域. 这篇文 ...

  3. Javascript 多线程编程​的前世今生

    作者:jolamjiang,腾讯 WXG 前端开发工程师 一篇关于 Web Worker.SharedArrayBuffer.Atomics 的文章. 为什么要多线程编程 大家看到文章的标题<J ...

  4. 前端模板引擎artTemplate---高性能JavaScript模板引擎

    关于artTemplate模板引擎的详细原理请移步高性能JavaScript模板引擎原理解析,本文只探讨如何使用.初学前端的人一般对于绑定数据都是使用原生js或者jquery来拼接字符串,此为hard ...

  5. JavaScript模板引擎Template.js基本使用详解

    template.js是一款JavaScript模板引擎,提供一套模板语法,简单好用,开发者可以写一个模板区块,每次传入的数据,生成对应数据产生的HTML片段,渲染不同的效果.官网:简洁语法版 htt ...

  6. 基于jQuery开发的javascript模板引擎-jTemplates

    这里介绍一个基于jQuery开发的模板引擎. jTemplates目前最新的版本是0.7.8,由tPython开发.官方网站:http://jtemplates.tpython.com 两个附件,一个 ...

  7. 前端javaScript模板引擎之ArtTemplate

    一.简介 ArtTemplate是腾讯开发的一款使用方便.性能卓越javascript模板引擎,其渲染效率极其快.ArtTemplate的库分为两种,一个是template.js,这个是简单的语法版本 ...

  8. v8引擎处理html,JavaScript V8引擎基础教程

    本篇教程介绍了JavaScript V8引擎基础教程,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < 一.浏览器内核-渲染引擎 渲染,就是根据描述或者定义构 ...

  9. if laytpl 非_laytpl : 一款非常轻量的JavaScript模板引擎

    //假设你得到了这么一段数据 var data = { title: '前端圈', intro: '一群码js的骚年,幻想改变世界,却被世界改变.', list: [{name: '贤心', city ...

  10. JavaScript多线程编程介绍

    综述:两种JavaScript多线程编程的方法,在以后的具有大量的数据计算的业务场景下可能会使用到 1.背景介绍 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成, ...

最新文章

  1. 重磅!如何高效学习单目深度估计
  2. PHP中不用第三个变量交换两个变量的值
  3. 将优化问题转化为决策问题
  4. Linux中文显示乱码?如何设置centos显示中文
  5. win10下安装ubuntu,双系统,免U盘
  6. 在HTML5网页中写法正确的是,跟永哥学HTML5(4):正确使用HTML5的header、hgroup和section...
  7. android之在view中内嵌浏览器的方法
  8. react学习(3)----不能在该位置用setstate
  9. ASP.NET2.0应用中定制安全凭证之理论篇
  10. Linux Ext2/Ext3/Ext4文件系统
  11. Nodejs 批量检测 Excel 中url链接是否可访问
  12. JxBrowser 与 JavaFX WebView
  13. 虚拟机(VMware)中windows2003系统服务器的IE无法打开搜索网页
  14. DXGI高帧率屏幕录像软件源码解析(声音捕获,抓屏,ffmpeg录像,MP4录像,flv录像,麦克风采集)(第2篇声音采集部分)
  15. 在类xx中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)否则 JavaFX 应用程序类必须....
  16. echarts 省市区联动地图
  17. 一套开源三维管线管理系统
  18. 威斯康星大学硕士计算机科学,2020年威斯康星大学密尔沃基分校排名TFE Times美国最佳计算机科学硕士专业排名第90...
  19. 域名过期和域名赎回的知识介绍
  20. 设计模式之--中介者模式

热门文章

  1. python web框架 - Django
  2. vue后台如何刷新过期的token_Vue刷新token,判断token是否过期
  3. docker 容器安装conposer_docker和composer安装
  4. 8086cpu学习笔记(3):寻址方式
  5. 阻止滑动事件_重温DOM事件流,捕获、冒泡、useCapture、passive
  6. L1-022 奇偶分家 (10 分) — 团体程序设计天梯赛
  7. git二分法查找命令说明
  8. jackson json转bean忽略没有的字段 not marked as ignorable
  9. ....................................thinkpad E480 用户初体验..............................
  10. hdu 1890 Robotic SortI(splay区间旋转操作)