当前位置: 首页 / 技术干货 / 正文
JavaScript 线程与进程初探

2022-11-25

执行 定时器 线程 进程 单线

  一、什么是进程?

  程序的一次执行,它占有一片独有的内存空间。可以通过任务管理器查看进程。

好程序员

  二、什么是线程?

  线程是进程内的一个独立的执行单元。是程序执行的一个完整流程。是CPU最小的调度单元。

  应用程序必须运行在某个进程的某个线程上。 一个进程中至少有一个运行的线程:主线程,进程启动后自动创建。 一个进程也可以运行多个线程。我们会说程序是多线程运行的。 一个进程中的数据可以供其中的多个线程直接共享。 多个进程间的数据是不能直接共享的。 线程池(Thread Pool):保存多个线程对象的容器,实现线程对象的反复利用。

  单线程和多线程的区别: 多线程: 优点:有效的提高CPU的利用率。 缺点: 创建多线程会增大开销。 线程间的切换开销。 死锁与状态同步的问题。 单线程: 优点:顺序编程简单易懂。 缺点:效率低。

  JS程序是单线程运行的。但使用HTML5中的Web Workers可以多线程运行。浏览器是多线程运行的。浏览器有单进程,也有多进程的。

  三、浏览器内核模块

  支撑浏览器运行最核心的程序。不同的浏览器内核可能不一样。内核是由很多模块组成的。

  浏览器模块构成: 主线程:

  JS引擎模块:负责JS程序的编译与运行。

  HTML, CSS文档解析模块:负责页面文本的解析。

  DOM/CSS模块:负责dom/css在内存中的相关处理。

  布局和渲染模块:负责页面的布局和效果的绘制(内存中的对象)。

  分线程:

  定时器模块:负责定时器的管理。

  事件响应模块:负责事件的管理。

  网络请求模块:负责ajax请求。

  四、定时器的理解

  定时器真的是定时执行的吗?

  定时器并不能保证真正的定时执行。一般会延迟一点,但是可以接受。也可能是延迟很长时间,不能接受。

  原因是JS是单线程的。定时器的回调函数是在主线程执行的。所以回调函数的开始执行时间受主线程的影响。

  定时器回调函数是在分线程执行的吗?

  是在主线程执行的,因为JS是单线程的。

  定时器是如何实现的?

  事件循环模型

  五、JavaScript 单线程的理解

  代码分类:

  初始化代码

  回调代码

  JS引擎执行代码的基本流程: 先执行初始化代码,包含一些特别的代码(设置定时器,绑定监听,发送ajax请求)。 后面某个时刻执行回调代码。

  为什么JS要设计成单线程模式? 如果JS使用多线程,此时程序中有两个线程P1和P2.P1负责修改字段,P2负责删除字段。它们同时作用于字段P。假设刚开始是P1抢到了资源但是在修改操作执行之前,P2抢到了资源,将P的内容删除了,此时P1的修改操作会失败。而且多线程间的切换也会浪费系统的资源。

好程序员公众号

  • · 剖析行业发展趋势
  • · 汇聚企业项目源码

好程序员开班动态

More+
  • HTML5大前端 <高端班>

    开班时间:2021-04-12(深圳)

    开班盛况

    开班时间:2021-05-17(北京)

    开班盛况
  • 大数据+人工智能 <高端班>

    开班时间:2021-03-22(杭州)

    开班盛况

    开班时间:2021-04-26(北京)

    开班盛况
  • JavaEE分布式开发 <高端班>

    开班时间:2021-05-10(北京)

    开班盛况

    开班时间:2021-02-22(北京)

    开班盛况
  • Python人工智能+数据分析 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2020-09-21(上海)

    开班盛况
  • 云计算开发 <高端班>

    开班时间:2021-07-12(北京)

    预约报名

    开班时间:2019-07-22(北京)

    开班盛况
IT培训IT培训
在线咨询
IT培训IT培训
试听
IT培训IT培训
入学教程
IT培训IT培训
立即报名
IT培训

Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号