线程进程 堆栈

200 阅读1分钟

线程与进程

进程是运行的程序,线程则是程序运行背后的 简单理解:进程>线程

为什么JS是单线程的?

chrome是windows中的一个进程,每个网页则是chrome中的子进程,而每个网页背后都配备一个JS引擎+页面渲染引擎的组合,因为只有一个JS引擎,所以是单线程的。

JS为什么可以渲染页面?

如果JS代码要渲染页面,则需要通过chrome提供的跨线程通信的方式去调用页面渲染引擎。

为什么Dom操作执行效率慢?

因为Dom操作不单单是JS内部的事情,需要动用到页面元素,代码渲染页面需要调用跨线程通信的方式,相当于跨部门合作,当然效率不高。

JS引擎主要功能

  • 编译:把JS代码翻译成机器能执行的机器码
  • 优化:改写代码使其更高效
  • 执行:执行上述机器码
  • 垃圾回收:把JS用完的内存回收

浏览器runtime env是什么

提供了一些api:window,document,setTimeout,navigator...
没错,这些都不属于JS自身的功能,这是浏览器的功能

Stack与Heap

  • Stack与Heap中文翻译都可以叫堆栈,是两块不同区
  • Stack区:数据顺序存放,用于存放非对象
  • Heap区:数据随机存放,用于存放对象

对象与非对象

number string boolean除外的都是对象

以下代码是如何存放于Stack与Heap中的