高级JS线程与进程七-爱代码爱编程
-
进程与线程:
- 应用程序必须运行在某个进程的某一个线程上;
- 一个进程中至少有一个运行的线程:主线程,进程启动后自动创建;
- 一个进程中可以同时运行多个进程,我们会说程序时多线程运行的;
- 一个进程内的数据可以供其中的多个线程直接共享;
- 多个线程之间的数据是不能直接共享的;
- 线程池:保存多个线程对象的容器,实现线程对象的反复利用;
- 单线程(顺序编程简单易懂;缺:效率低)和多线程(有效提升CPU的利用率,缺:创建多线程开销、线程间切换开销、死锁与状态同步问题)区别:
- js单线程运行(alert会暂停当前主线程执行,同时会暂停定时器的执行,点击确定后,回复程序执行和计时);H5中web workers 可以多线程运行;浏览器是多线程、有单进程、多进程;
- 回调函数是异步代码:在初始化代码执行完成之后才会执行;
-
浏览器内核:
- 支撑浏览器运行的主核心的程序;
- js引擎模块:负责js程序的编译与运行;(主线程)
- html、css文档解析模块:负责页面文本的解析;(主线程)
- DOM/CSS模块:负责dom、css在内存中的相关处理;(主线程)
- 布局个渲染模块:负责页面的布局和效果的绘制;(主线程)
- 定时器模块:负责定时器管理;(分线程)
- dom事件响应模块:负责事件的管理;(分线程)
- 网络请求模块:负责AJAX请求;(分线程)
-
H5 web workers(多线程):
- 可以将一些大量计算的代码交由web worker运行而不冻结用户界面;
- 但是子线程完全受主线程控制,且不得操作DOM,所以,这个新标准并没有改变JavaScript单线程的本质;
- 缺点:worker内代码不能访问DOM;不能跨域加载js;不是每个浏览器都支持这个新特性;