线程与进程机制
进程与线程
进程:程序运行的时候,独立站用一块内存空间
线程:进程内一个独立执行的的单元,是程序执行的一个完整流程,是cpu最小的单元调度
一个进程只要有一个运行的线程
一个进程可以有多个线程
线程池:保存多个线程对象的容器,实现程序复用
多线程和多进程
多进程:一个应用程序可以同时启动多个实例
多线程:在一个进程中,同时有多个线程运行
多线程的优缺点
good:有效提高cpu的利用率,创建多线程开销
bad:线程之间切换开销,死锁和同步问题
单线程的优缺点
good:顺序变成简单易懂
bad:效率低
JS和线程
js是单线程运行的,但使用H5的web Workers可以多线程运行
浏览器是多线程运行的,有多进程的,也有单进程的
js作为浏览器的脚本预压,主要是与用户互动以及操作dom的,如果用多线程,会带来很复杂的同步问题
浏览器内核
支撑浏览器最核心的程序
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tn6xmNDS-1601088994832)(D:\软件\其他\Typora\image-20200924162803043.png)]
内核的组成
js引擎
html/css文档解析模块
DOM/CSS模块
布局和渲染模块
定时器模块
事件响应模块
网络请求模块
定时器模块相关问题
定时器不能保证真正定时执行,一般会延迟一丁点
js引擎基本流程
先执行初始化代码
再执行一些特殊代码{
设置定时器
绑定监听
发送ajax请求
}
最后再执行回调偏函数代码
事件循环模型
是JS的运行时还有一个事件等待队列与栈搭配,每当运行栈为空时(也就是当前函数运行结束),JS的运行时就从当前的事件队列中取出一个消息处理,执行与这个消息相关联的函数。