编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

JavaScript 是如何运行的?(javascript运行机制)

wxchong 2024-07-20 08:21:50 开源技术 57 ℃ 0 评论

JavaScript 是如何运行的?

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

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

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

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

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

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

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

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

并发性和事件循环

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

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

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

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

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

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

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表