javascript异步-Event loop

概述

Event Loop 是一种很重要的概念,指的是计算机系统的一种运行机制。


javascript异步-Event loop_第1张图片
Event_loop.png

Javascript是种单线程的机制。从而导致了一些问题,至于哪些这里就不做过多的研究。利用这种机制可以解决单线程多带来的问题。

为什么会有Event loop?

想要理解Event Loop,就要从程序的运行模式讲起。运行以后的程序叫做"进程"(process),一般情况下,一个进程一次只能执行一个任务。
先来看看计算机对于多任务多线程的处理方式。
1.排队
2.新建进程
3.新建线程
JavaScript是一种单线程语言。所有的任务都在一个线程上完成,就是我们上面说的排队。细想一下就是,一旦遇到一个耗时过大的任务,就会形成堵塞的状况。似乎一些都停滞不前,无法响应用户的行为。这样的情况大概就是下面的这种情况:

javascript异步-Event loop_第2张图片
oneline_process.png

上图的绿色所代表程序所运行的时间,而红色所代表的是等待响应的时间。可以看出很多的时间是消耗在了等待响应上面了。
看看多线程的情况:
javascript异步-Event loop_第3张图片
moreline_process.png

多线程看起来占用更多的资源,这显然是很耗资源的。

出现了问题就会有个东西出来解决,Event loop 就是用来解决此等问题。
Event loop 就是一种程序运行的结构,他实行两条路线:一条是主干道,用来运行实现,可以叫他‘主线程’。他负责整个程序的运行;另一条干道负责连接其他进程与主进程的通讯,这条干道就是我们要说的Event loop线程;
看看Event loop 跑起是什么样子的:


javascript异步-Event loop_第4张图片
Event_loop_process.png


上图的绿色部分就所代表运行时间,而橙色部分表示空闲时间。每当遇到I/O的时候,主线程就让Event Loop线程去通知相应的I/O程序,然后接着往后运行,所以不存在红色的等待时间。等到I/O程序完成操作,Event Loop线程再把结果返回主线程。主线程就调用事先设定的回调函数,完成整个任务。以这种方式大大的提高了效率。
JavaScript语言的运行方式就是采取这方式,单线程虽说大大的限制了javascript,但是利用这种方式会大大提高了javascript的效率,只要程序安排的妥当就不会出现那种堵塞的状况。

参考文献:
阮一峰的网络日志

你可能感兴趣的:(javascript异步-Event loop)