1.why 单线程?
- JavaScript目的是与用户互动+操作DOM,非单线程带来复杂同步问题;EXAMPLE:有两个线程 一个在DOM节点上添加内容,另外一个又在删除这个点。浏览器听谁的?
- 新标准 HTML5提出web worker标准,允许JavaScript创建多线程,但是子线程完全受主线程控制,且不得操作DOM。没有改变其本质。
- 弊端 单线程运行那后面的排着等你。
2. 任务队列
很多时候IO(乌龟)限制CPU(兔子)的发挥。
所以把IO里面的任务?
将任务分成同步与异步。
- 同步:主线程上排队进行的任务。按序执行。
- 异步:不进入主线程、而进入任务队列的任务。只有去通知主线程某个异步任务可执行了,该任务才会进入主线程执行。
- 同步执行

- 异步执行
image.png
上图主线程的绿色部分,还是表示运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。
可以看到,由于多出了橙色的空闲时间,所以主线程得以运行更多的任务,这就提高了效率。这种运行方式称为”异步模式“(asynchronous I/O)。
网友评论