Nodejs的官方释义:

一个搭建在Chrome JavaScript运行时上的平台,用于构建高速、可伸缩的网络程序。Node.js采用的事件驱动、非阻塞I/O模型,使它
既轻量又高效,并成为构建运行在分布式设备上的数据密集型实时程序的完美选择。

获取几组标签:基于Chrome JS引擎、可伸缩、事件驱动(事件轮询)、非阻塞I/O(异步I/O)、轻量、分布式、数据密集、实时......

今天聊聊事件轮询和非阻塞I/O

 

我们来看一小段jQuery用XMLHttpRequest(XHR)做Ajax请求的代码:

这个程序会发送一个到resource.json的HTTP请求。当响应返回时会调用带着参数 data 的匿名函数(在这个上下文中的“回调函数”), data 就是从那个请求中得到的数据。

注意,代码没有写成下面这样:

在这个例子中,假定对resource.json的响应在准备好后会存储在变量 data 中,并且在此之前函数 console.log 不会执行。I/O操作(Ajax请求)会“阻塞”脚本继续执行,直到数据准备好。因为浏览器是单线程的,如果这个请求用了400ms才返回,那么页面上的其他任何事件都要等到那之后才能执行。可以想象一下,如果一幅动画被停住了,或者用户试着跟页面交互时动不了,那种用户体验有多糟糕。

 

在Nodejs中,当浏览器中有I/O操作时,该操作会在事件轮询的外面执行(脚本执行的主顺序之外),然后当这个I/O操作完成时,它会发出一个“事件”,会有一个函数(通常称作“回调”)处理它。
这个I/O是异步的,并且不会“阻塞”脚本执行,事件轮询仍然可以响应页面上执行的其他交互或请求。这样,浏览器可以对客户做出响应,并且可以处理页面上的很多交互动作。

posted on 2016-10-19 14:33  jack.li  阅读(1644)  评论(0编辑  收藏  举报