JS-单线程理解

wujiawen 发布于

JS单线程理解

  • 浏览器页面的渲染的是由多线程完成的
  1. GUI 渲染线程
  2. JavaScript引擎线程
  3. 定时触发器线程
  4. 事件触发线程
  5. 异步http请求线程
  • js的单线程并不是js语言的特性,而是浏览器只给js分配了一个线程

  • JS单线程执行的原因(为什么JS是单线程的)
    JS负责处理页面交互,设计DOM节点操作,若是多线程工作

    则有可能存在两个线程同时操作一个DOM

    一个负责修改一个负责删除,那么这个时候就需要浏览器来裁决如何生效哪个线程的执行结果

    当然我们可以通过锁来解决上面的问题

    但为了避免因为引入了锁而带来更大的复杂性,JS在最初就选择了单线程执行

  • 单线程执行的JS,通过事件循环来完成异步操作
    异步操作由子线程执行,子线程不进行DOM操作

  • 简单总结
    JS单线程不是JS的语言特性,而是指JS的执行是单线程的