Javascript多线程引擎(二)
多线程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多线程引擎(二)相关推荐
- Web Worker javascript多线程编程(一)
什么是Web Worker? web worker 是运行在后台的 JavaScript,不占用浏览器自身线程,独立于其他脚本,可以提高应用的总体性能,并且提升用户体验. 一般来说Javascript ...
- JavaScript 对引擎、运行时、调用堆栈的概述理解
JavaScript 对引擎.运行时.调用堆栈的概述理解 随着JavaScript越来越流行,越来越多的团队广泛的把JavaScript应用到前端.后台.hybrid 应用.嵌入式等等领域. 这篇文 ...
- Javascript 多线程编程的前世今生
作者:jolamjiang,腾讯 WXG 前端开发工程师 一篇关于 Web Worker.SharedArrayBuffer.Atomics 的文章. 为什么要多线程编程 大家看到文章的标题<J ...
- 前端模板引擎artTemplate---高性能JavaScript模板引擎
关于artTemplate模板引擎的详细原理请移步高性能JavaScript模板引擎原理解析,本文只探讨如何使用.初学前端的人一般对于绑定数据都是使用原生js或者jquery来拼接字符串,此为hard ...
- JavaScript模板引擎Template.js基本使用详解
template.js是一款JavaScript模板引擎,提供一套模板语法,简单好用,开发者可以写一个模板区块,每次传入的数据,生成对应数据产生的HTML片段,渲染不同的效果.官网:简洁语法版 htt ...
- 基于jQuery开发的javascript模板引擎-jTemplates
这里介绍一个基于jQuery开发的模板引擎. jTemplates目前最新的版本是0.7.8,由tPython开发.官方网站:http://jtemplates.tpython.com 两个附件,一个 ...
- 前端javaScript模板引擎之ArtTemplate
一.简介 ArtTemplate是腾讯开发的一款使用方便.性能卓越javascript模板引擎,其渲染效率极其快.ArtTemplate的库分为两种,一个是template.js,这个是简单的语法版本 ...
- v8引擎处理html,JavaScript V8引擎基础教程
本篇教程介绍了JavaScript V8引擎基础教程,希望阅读本篇文章以后大家有所收获,帮助大家对JavaScript的理解更加深入. < 一.浏览器内核-渲染引擎 渲染,就是根据描述或者定义构 ...
- if laytpl 非_laytpl : 一款非常轻量的JavaScript模板引擎
//假设你得到了这么一段数据 var data = { title: '前端圈', intro: '一群码js的骚年,幻想改变世界,却被世界改变.', list: [{name: '贤心', city ...
- JavaScript多线程编程介绍
综述:两种JavaScript多线程编程的方法,在以后的具有大量的数据计算的业务场景下可能会使用到 1.背景介绍 JavaScript 语言采用的是单线程模型,也就是说,所有任务只能在一个线程上完成, ...
最新文章
- 重磅!如何高效学习单目深度估计
- PHP中不用第三个变量交换两个变量的值
- 将优化问题转化为决策问题
- Linux中文显示乱码?如何设置centos显示中文
- win10下安装ubuntu,双系统,免U盘
- 在HTML5网页中写法正确的是,跟永哥学HTML5(4):正确使用HTML5的header、hgroup和section...
- android之在view中内嵌浏览器的方法
- react学习(3)----不能在该位置用setstate
- ASP.NET2.0应用中定制安全凭证之理论篇
- Linux Ext2/Ext3/Ext4文件系统
- Nodejs 批量检测 Excel 中url链接是否可访问
- JxBrowser 与 JavaFX WebView
- 虚拟机(VMware)中windows2003系统服务器的IE无法打开搜索网页
- DXGI高帧率屏幕录像软件源码解析(声音捕获,抓屏,ffmpeg录像,MP4录像,flv录像,麦克风采集)(第2篇声音采集部分)
- 在类xx中找不到 main 方法, 请将 main 方法定义为: public static void main(String[] args)否则 JavaFX 应用程序类必须....
- echarts 省市区联动地图
- 一套开源三维管线管理系统
- 威斯康星大学硕士计算机科学,2020年威斯康星大学密尔沃基分校排名TFE Times美国最佳计算机科学硕士专业排名第90...
- 域名过期和域名赎回的知识介绍
- 设计模式之--中介者模式
热门文章
- python web框架 - Django
- vue后台如何刷新过期的token_Vue刷新token,判断token是否过期
- docker 容器安装conposer_docker和composer安装
- 8086cpu学习笔记(3):寻址方式
- 阻止滑动事件_重温DOM事件流,捕获、冒泡、useCapture、passive
- L1-022 奇偶分家 (10 分) — 团体程序设计天梯赛
- git二分法查找命令说明
- jackson json转bean忽略没有的字段 not marked as ignorable
- ....................................thinkpad E480 用户初体验..............................
- hdu 1890 Robotic SortI(splay区间旋转操作)