JavaScript 是如何运行的?

几乎每个人都听说过 v8引擎这个概念,大多数人都知道 JavaScript 是单线程的,或者它使用的是回调队列。

JavaScript 是如何运行的?

几乎每个人都听说过 v8引擎这个概念,大多数人都知道 JavaScript 是单线程的,或者它使用的是回调队列。

执行 JavaScript 代码所涉及的核心组件包括运行时环境和浏览器,他们内部如何工作呢?

  • JavaScript Engine
  • JavaScript Runtime Environment
  • The Call Stack
  • Concurrency and Event Loop

JavaScript 是一种解释性编程脚本语言,JavaScript 引擎就是一个执行 JavaScript 代码的计算机程序:解释器,当 JavaScript 文件在浏览器中加载时,负责逐行解析代码,将其转换为机器代码,然后执行它。

JavaScript 是如何运行的?

每个浏览器都有自己的 JavaScript 引擎,但最著名的是 Google 的 v 8引擎。V8引擎不仅为 Google Chrome 提供动力,还为 Node.js 提供动力,这就是 JavaScript 运行时。

JavaScript 是如何运行的?

引擎由两个主要组件组成:

  • 内存堆(Memory Heap)ーー这是内存分配发生的地方
  • 调用堆栈(Call Stack)ーー这是代码执行时堆栈帧的位置
JavaScript 是如何运行的?

Call Stack调用堆栈:计算模型:栈下推自动机,图灵等价。

JS是一种单线程的编程语言,这意味着它只有一个 Call Stack。因此,它可以一次只做一件事。并且不必处理在多线程环境中出现的复杂场景(例如,死锁)。

调用堆栈是一种数据结构,它基本上记录我们在程序中的位置。如果我们进入一个函数,我们把它放在堆栈的顶部。如果我们从一个函数返回,我们将从堆栈顶部弹出。

运行时

JavaScript 引擎并不是孤立运行的。它和许多其他组件一起运行在一个叫做JavaScript Runtime Environment 中。

JRE 负责JavaScript 的异步执行。组件包含:

  • JS Engine, such as V8
  • Web API
  • Callback Queue or message queue
  • Event Table
  • Event loop
JavaScript 是如何运行的?

并发性和事件循环

虽然是单线程,为了处理多任务,需要并发交替执行,

并发、多线程、多进程、异步编程和事件循环等是一组相关概念,交织在PL和OS的中间。

首先,并发性是一个概念,它能够无序地处理多个任务。任务一般分为计算密集和读写密集。

real world,一个餐厅,一排人点菜后,后厨出菜就是无序的,有的菜工序复杂就得多等,这就是异步,同步就是先来后到一个个上完菜。

实现并发性的技术很多,包括多线程、多进程和异步编程。

异步编程, 比如node.js并发性 使用的异步 i/o,将 i/o 操作移交给操作系统内核,并将 i/o 操作的回调推迟。异步io这个任务就放在事件循环队列进行调度。

由此各组件基本解释一番。

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/86466.html

(0)
上一篇 2024-10-03 06:31
下一篇 2024-10-03 21:00

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信