Javascript单线程实现

Posted 叫我小枫

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Javascript单线程实现相关的知识,希望对你有一定的参考价值。

对于javascript的单线程实现一直一知半解的。开始以为很难,但是仔细看一下感觉还好。

首先明白一点,js是单线程的,也就是说js只能在同一时刻处理一段代码。但是js运行的环境浏览器却是可以多线程的,它具有多个线程,js代码处理引擎线程、事件触发线程、http请求线程、计时器触发线程。多者辅助,实现了js的异步处理。

准确的来说。这个实际上就是说,js引擎线程就是主程序。一旦碰上相应的例如计时器产生了,就先将这个定时器内部的代码先挂起,等到需要执行的时间到了,让计时器的线程提醒js该执行刚刚的代码了。js这样就达到了伪异步。

setTimeout(function(){
    console.log(\'settime\');
}, 0);
console.log(\'now\');

例如以上输出的就实现输出now,然后输出settime。

这个是让我觉得最清楚的一个图了。蓝色整体代表着js引擎中要执行的代码部分。蓝色javascript的块是现在要执行的代码部分当我们想要出发interval或者点击事件等得时候事情都需要往后排。直到当前执行结束之后再进行处理后面的得代码。但是settimeout和setinterval还有一些区别,settimeout如果产生了,就将事情放到等待处理的序列中,但是settimeout每次毁掉触发的时候只会保留第一次需要执行的代码部分,如果第二次需要触发的时候,其中js引擎有使用的时候,就会将这一次回调触发抛弃。直到js部分闲下来了,就会立刻执行。

 

详细标准:

http://www.cnblogs.com/sprying/archive/2013/05/26/3100639.html

以上是关于Javascript单线程实现的主要内容,如果未能解决你的问题,请参考以下文章

单线程的JavaScript是如何实现异步的

JavaScript 是单线程的而且是异步的机制

Javascript异步机制

单线程的JavaScript

javascript同步和异步的区别与实现方式

Javascript是单线程的深入分析(转)