如何进行nodejs异步编程?

网站建设知识 phpacg 2年前 (2018-04-24) 102次浏览 0个评论

我树立玩一下AJAX,是希望您体验一下异步,并不是希望您了解AJAX这机制的完成方法,由于AJAX是一个特别典型且复杂的异步场景,比如:

执行某个函数 -> 执行语句A,B,C,D -> 在D语句发起异步央求,同时向引擎注册一个回调事情 -> 执行E,F,G ->参与函数块 ,引擎Loop…Loop…Loop,此时异步的央求失掉了Response,之前注册的回调被执行。

实践上Node.js主要是为了应对主流web app存在少量I/O等候而CPU闲置的场景所衍生的处置方案,而在架构上,它的后端有一个底层的worker封装,每当你有一个诸如addUser这样的I/O操作时,它们都会被交由worker去执行从而到达让出尽快让出以后函数的执行权的目的,在向引擎注册完回调后,外部会经过事情轮询去反省该I/O事情的句柄,当句柄显示该事情操作完成后,则注册的回调则被执行。

所以,假定有人(按题设,简化一下场景,有且只要2团体)同时央求addUser(A)和userList(B),B的央求会在执行完A的央求外部一切同步代码后被执行,而哪怕worker此时依然在停止addUser 这一 I/O操作,用户B也并不会被引擎挂起或许等候。这就是为什么Node.js单节点却一样可以拥有高负载才干的缘由。

至于什么样的代码是异步的,你看看node文档里fs模块的运用方法就知道了,大约的方式就是如下这种。

module.method( args [,callback] )

当然还有一种比拟极端的状况,假定您运用的数据库是山寨的,驱动是基于同步完成的,那么B就该等多久等多久把,树荫底下喝杯茶,下个棋,和前面的C,D,E,F,G打个招呼呗~~~

我引荐您先去玩一下前端的AJAX了解一下 异步编程方式,体验一下异步的“觉得”,然后看一本叫《JavaScript异步编程》的书。

Node.js 是一款基于Event-driven的模型构建的Framework,它典型的特征就是经过内置的事情轮询来调度事情,通常来说node.js的数据库驱动都是基于异步完成的,所以在实践状况中,A提交博客和B注册用户这两个央求是可以同时由Node.js 来handle,并依照实践操作的处置事情区分调度给予阅读器照应。

当然,假定您在业务代码里写了一个耗时很久的同步代码(比如直接写一个while(true)的loop,Node就死了),由于JavaScript自身单线程的限制,所以整个App就会被block住,后续的事情/顺序只要等到该段代码执行完成之后才会被处置,这也是为什么我们通常不建议在Node.js层做大规模计算(JS自身的计算效率太低,会招致Node吞吐量会大大降低),而倾向由C++的拓展去完成。

喜欢 (0)
发表我的评论
取消评论
表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址