2017年9月15日 上午10:49
参考:
javascript-js实现多线程 - 浩大王 - 博客园
浏览器的多线程机制(转) - SolHe - 博客园
概述
先说明浏览器的多线程实现方式,其中着重说明了其中一个线程—javaScript引擎线程的执行方式
浏览器多线程实现方式

只要理解了上图就说明理解了浏览器多线程工作的方式(这里不能说成js多线程)
总结来说:js引擎主要是通过一个队列来存放要执行的任务。只不过我们平时操作的时候我们很少会让一个js函数执行很长的时间,从造成线程堵塞,让我们误以为js是支持多线程的。这其中的队列是核心。
与android多线程对比,加强理解
- 与android中操作图片的下载是一样的。在android的主视图是一个主线程,在这个主线程中我们是不允许使用http连接的,因为http连接如果事件过长,那么会造成屏幕操作的卡死,用户体验很差。这是我们就要新开一个线程去完成http请求并且下载大量图片。
- 在这个新开的下载图片的线程中,handler(其实是视图主线程的handler,并不是looper这一线程的handler)先负责向looper拥有的message队列中放message,然后在looper要求的时候去处理message。这里的looper就相当于这里的js引擎,他们都有自己拥有的一个消息队列,并且他们这些队列中的消息都是由其他线程给的。
- 他们有一个消息就处理一个消息,只关注眼前,根本不关心自己还有多少任务要做,心真大。
附录:
Ajax工作原理 - Eric Sun - 博客园
这篇文章对同步和异步解释的比较详细