node.js特点

node是js的执行环境,node.js没有任何根目录(因为nodeJs本质上是没有web容器)

1、单线程:同一个时间只能做一件事

2、非I/O阻塞

3、事件驱动

JS的单线程环境,即js代码的代码执行时从上到下依次执行(同一时间只能做一件事),意味着:所有的任务需要排队,前一个任务结束之后才会执行后一个任务。如果前一个任务耗时事件比较长,后一个任务不得不等待,。

Js中所有的任务分为两种:同步任务(主线栈上排队执行的任务)、异步任务(不进入主线程,而进入“任务队列”的任务,只有任务队列通知主线程某个异步任务执行,该异步任务才会进入主线程执行)。在所有的同步任务执行完之前,所有的异步任务都不会执行。

for(var i=0;i<4;i++){

setTime(funcion(){

console.log(i)

},0)

}

结果是4,4,4,4

异步执行的运行机制:

$.ajax('http://segmentfault.com', function(resp) {
    console.log('我是响应:', resp);
});

// 其他代码
...
...
...

1:所有的同步任务都在主线程执行,形成一个执行栈

2:主线程之外还存在一个“任务队列”(消息队列),只要异步任务有了结果,拿到响应后,它会把响应封装成一个JavaScript对象,然后构造一条消息。

// 消息队列中的消息就长这个样子
var message = function () {
    callbackFn(response);
}

3:一旦“执行栈”中的同步所有同步任务执行完毕,系统就会读取“任务队列”,看看那些事件对应的异步任务,就会到消息队列取出这条消息(也就是message函数),并执行它。到此为止,就完成了工作线程对主线程的通知,回调函数也就得到了执行。如果一开始主线程就没有提供回调函数,AJAX线程在收到HTTP响应后,也就没必要通知主线程,从而也没必要往消息队列放消息。

4:主线程不断重复第三步

主线程从任务队列中读取事件,这个过程是循环不断的,所以整个的这种运行机制又称EventLoop(事件循环) ,只要这个主线程空了就会读取任务队列,这就是javascript的运行机制,这个过程会循环反复。

单线程就意味着,所有任务需要排队,前一个任务结束,才会执行后一个任务。如果前一个任务耗时很长,后一个任务就不得不一直等着。
js引擎执行异步代码而不用等待,是因有为有 消息队列和事件循环。

消息队列:消息队列是一个先进先出的队列,它里面存放着各种消息。
事件循环:事件循环是指主线程重复从消息队列中取消息、执行的过程。

实际上,主线程只会做一件事情,就是从消息队列里面取消息、执行消息,再取消息、再执行。当消息队列为空时,就会等待直到消息队列变成非空。而且主线程只有在将当前的消息执行完成后,才会去取下一个消息。这种机制就叫做事件循环机制,取一个消息并执行的过程叫做一次循环。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值