1. <output id="xofhe"></output>

      <menuitem id="xofhe"></menuitem>
      当前位置: 首页 / 技术分享 / 正文
      JavaScript 线程与进程初探

      2022-11-25

      执行 定时器 线程 进程 单线

        一、什么是进程?

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

        二、什么是线程?

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

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

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

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

      JavaScript 线程与进程初探

        三、浏览器内核模块

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

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

        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的修改操作会失败。而且多线程间的切换也会浪费系统的资源。

      分享: 更多

      上一篇:Promise、generato....sync类同步编程

      下一篇:

      好程序员公众号

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

      好程序员开班动态

      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(北京)

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

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

      成熟妓女BBw
        1. <output id="xofhe"></output>

          <menuitem id="xofhe"></menuitem>