Nodejs中的事件轮询和异步IO

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是异步的,并且不会“阻塞”脚本执行,事件轮询仍然可以响应页面上执行的其他交互或请求。这样,浏览器可以对客户做出响应,并且可以处理页面上的很多交互动作。

转载于:https://www.cnblogs.com/jackxlee/p/5977215.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值