爱的魔力转圈圈——Event Loop深入详解_第1页
免费预览已结束,剩余3页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、爱的魔力转圈圈event loop深入详解多进程的扫瞄器 在提到单线程的javascript之前,先说一下扫瞄器的多进程做铺垫。 现代扫瞄器都是多进程的,以chrome为例,假如想要查看扫瞄器的进程,可以打开菜单 - 更多工具 - 任务管理器 即便只打开一个网页,也会发觉不止一个任务,在chrome里,有如下进程 多进程的益处是享受操作系统里更好的隔离性,即便插件挂了,也只影响了插件的进程,对页面没有影响。像docker启动的实例,其实也都是进程隔离。 但因为进程比较重,所以还有一个轻量级的线程可供用法,线程依附于进程。 单线程的javascript 我们知道javascript是一种单、异步

2、非堵塞、说明型的语言。单线程指的是在javascript引擎中——无论是扫瞄器环境还是node.js环境,执行javascript代码的线程惟独一个。但不能认为囫囵运行环境的线程数惟独一个,以扫瞄器来说,普通会有如下线程 javascript引擎线程 - 负责执行javascript,和gui渲染线程是互斥的,由于javascript也能操作dom,而ui的操作普通只能由一个线程来执行 大事触发线程 - 把大事任务放入大事队列,来源不光是ui大事,也可能是定时器、http哀求等 定时触发器线程 - 执行settimeout和setinterval,到时后

3、通过大事触发线程放入大事队列 http哀求线程 - 负责处理异步的ajax哀求,哀求完成后,通知大事触发线程把回调放入大事队列 gui渲染线程 - 解析html和css,然后将他们构建成dom树和cssom树,进而合成渲染树,重排重绘也会调用起该线程;与javascript引擎线程是互斥的,当 javascript引擎线程在工作的时候,gui 渲染线程会被挂起,gui更新被放入在 javascript任务队列中,等待javascript引擎线程空闲的时候继续执行 在需要控制ui的客户端端技术中,都只能是由单个线程来控制界面变幻,无论是web还是ios还是android,都只能是由特定的运行线程

4、来操作界面,假如多个线程的话反而会造成ui紊乱以及无谓的渲染开销,刚才也提到了javascript引擎线程因为能操作dom,所以和gui渲染线程也会形成互斥。 javascript虽然是单线程,但是它能做到异步非堵塞,速度嗖嗖的快,发出xhr哀求后不需要等到它返回之后才继续往下执行,而是可以等到响应回归之后自动调用回调函数。javascript异步的实现靠的就是扫瞄器的多线程,当他碰到异步api时,就将这个任务交给对应的线程,当这个异步api满足回调条件时,该线程又通过大事触发线程将这个大事放入任务队列,然后主线程从任务队列取出大事继续执行。这个任务队列就是event loop。 在最新的html5中有了web worker,它能开出另一个线程,但是不涉及扫瞄器渲染等操作,也就是说它只是一个特别的用作计算作用的线程,并受主线程管控。 同步与异步 在单线程环境下,代码分两种,一种是同步任务,一种是异步任务。假如不存在异步任务,那么代码永久是根据从上到下的次序执行,对于一些耗时、等待的场景则必定引起堵塞。如果有一个按钮点击之后从服务器下载数据,一旦堵塞,那么

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论