本帖最后由 愚者的片尾 于 2017-12-21 22:05 编辑
众所周知,JS是一门单线程语言,而在单线程的条件下异步看似可以“多线程”地处理某些问题,这是怎么一回事? 首先,我们先搞明白什么是异步:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式(来自百度百科)。比如我们在浏览一些网站需要加载资源占用比较大的例如超清图片等,若是像同步状态下那样等图片加载完再解析整个页面,用户恐怕早就关掉网页了。这时候,异步就体现出了它的价值。
那么,异步到底是怎么实现的?让我们来看下这张图片。 于我而言,异步的核心理念是搁置。将资源占用大耗时久的任务搁置在一旁,解析完主干再回过头来加载。图解来说就是:一、同步任务进入主线程,异步任务进入Event Table并注册函数;二、当主线程完成部分指定事件,便将Event Table上的函数移入Event Queue(了解得不够底层,并不清楚具体的移入时机);由于JS引擎存在monitoring process进程,一旦主线程上的任务全部执行完毕,便会去Event Queue上把函数放到主线程上执行。上述过程在整个解析过程会不断重复,此即为事件循环。
(图片、内容来源于ssssyoki发表于掘金)
|
|