浏览器历史、进程与线程、轮转时间片、

JS的历史

年份 1996
作者 Brendan Eich(布兰登·艾奇)
处名 LiveScript
目的 改善网页的用户体验
版权 Oracle(卖数据库的)
分界线 2001年IE6问世。首次从内核中分离出JS引擎。(之前的渲染引擎处理js,很低效支持很不好,几乎不能写js)
IE6配合XP浏览器,成为了老系统的御用浏览器。
翻译过程:js代码 -> c -> 汇编代码 -> 机械码
V8引擎 2008年Google+apple发布Chrome,webkit内核,内置V8引擎。(V8火箭)
将js代码直接转为0101的机械码执行,最大的特点是执行速度快。
特点
- 解释性语言
- 单线程
ECMA标准 起初,微软JScript、CEnvi的ScriptEase,于JavaScript并列,都可以浏览器运行。但是三者文档参差不齐。
ECMA联盟统一了他们的规范和文档。但是统一后对前两者不友好,活不下去都死了,只剩下js了。
因为标准是ECMA定的,所以又叫ECMAScript
js执行队列 轮转时间片 — 实现“单线程模拟多线程”的效果

周边

线程

单线程

一个人同一时间只能干一件事。【叫做同步】

  • JavaScript引擎是单线程的

    多线程:

    一个执行体同一时间可以干很多事(左手画方、右手画圆)【叫做异步】

    解释性语言

    将代码翻译成0101机械码的过程有两种:
  1. 编译
  2. 解释

因翻译性质不同,出现两种语言:
1、编译性语言

  • 翻译过程是通篇翻译并生成翻译文件、程序最终执行该文件
  • 代表语言:C、C++
  • 优点:执行快
  • 不足:跨平台性不好(c和c++需要针对win和linux编译出来对应的文件)又叫移植性不好

2、解释性语言

  • 翻译过程是看一行翻译一行、不报错翻译下一行,以此类推
  • 代表语言:js、python、php
  • 优点:不用翻译成文件,跨平台。
  • 缺点:执行偏慢

    解释性语言和编译性语言对比

  • JavaScript又叫动态语言(动态语言基本都是解释性语言、解释性语言大部分都是脚本语言)
分类 编译性语言 解释性语言
翻译过程 是通篇翻译并生成翻译文件、程序最终执行该文件 翻译过程是看一行翻译一行、不报错翻译下一行,以此类推
特点 静态语言,定义变量的同时要定义数据类型。 带尖角号的都叫解释性语言
声明变量的关键字就一个(var/let/const,之所以演变出三个,也是因为要创建的变量作用域不同,而不是为了区分变量的数据类型。不用通篇编译、解释一行执行一行。)
代表语言 C、C++、R语言、Ruby js、python、php
优点 执行快 不用翻译成文件,跨平台。
不足 跨平台性不好(c和c++需要针对win和linux编译出来对应的文件)又叫移植性不好 执行偏慢(因翻译一行、执行一行)

*Java不是以上两种语言,java是oak语言
翻译过程:.java文件 -> javac指令 -> 编译 ->.class文件 -> jvm虚拟机 -> 7都能解释执行(因为jvm成全了java的跨平台性。BB机也能用java)

轮转时间片

例子:
闪电侠的逆闪,一微秒左边,一微秒右边。速度足够快,视觉分辨不出来,看上去就有俩人。
比如:
两个任务都要执行,按照单线程的逻辑,一次只能执行一个任务。
但要两个任务同时执行(比如两个定时器)那就把这两个任务切成很多小段。打乱顺序依次排队推进Js执行主线程,(顺序打乱谁排前后不一定,叫做争抢时间片)。JS引擎以一个时间片为基准单位去执行时间片段。最终两个任务按照时间片段看上去同时执行完。模拟出多线程的效果。
轮转时间片 - 是计算机操作系统的基础知识