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的修改操作会失败。而且多线程间的切换也会浪费系统的资源。
开班时间:2021-04-12(深圳)
开班盛况开班时间:2021-05-17(北京)
开班盛况开班时间:2021-03-22(杭州)
开班盛况开班时间:2021-04-26(北京)
开班盛况开班时间:2021-05-10(北京)
开班盛况开班时间:2021-02-22(北京)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2020-09-21(上海)
开班盛况开班时间:2021-07-12(北京)
预约报名开班时间:2019-07-22(北京)
开班盛况Copyright 2011-2023 北京千锋互联科技有限公司 .All Right 京ICP备12003911号-5 京公网安备 11010802035720号