配色: 字号:
第七课 Nodejs异步回调
2020-12-22 | 阅:  转:  |  分享 
  
Node中事件工作原理4.处理I/O任务handleIOTask:function(event){//当前线程v
arcurThread=this;//操作数据库varoptDatabase=function(
params,callback){varresult=readDataFromDb(params);
callback.call(null,result)}//执行IO任务optDat
abase(event.params,function(result){//返回结果存入事件对象中
event.result=result//IO完成后,将不再是耗时任务event.
isIOTask=false//将该事件重新添加到队列的尾部this.globalEve
ntQueue.push(event)//释放当前线程releaseThread(curT
hread)})}/处理IO任务完成后将事件添加到队列尾部释放线程/Node中事
件工作原理Node.js本身是一个多线程平台,而它对JavaScript层面的任务处理是单线程的。Node中事件的实现
Node.js中大部分的模块,都继承自Event模块,Event模块(events.EventEmitter)是一个简单的事件监听
器模式的实现:事件示例1.绑定和触发事件constEventEmitter=require(''events'');/
/自定义一个对象继承于EventEmitterclassMyEmitterextendsEventEmitter{}
constmyEmitter=newMyEmitter();myEmitter.on(''event'',function
(){//添加事件监听器console.log(''触发了一个事件!'');});myEmitter.emit(
''event'');//触发指定事件事件示例2.为事件传递参数constEventEmitter=require(
''events'');classMyEmitterextendsEventEmitter{}constmyEmitte
r=newMyEmitter();myEmitter.on(''event'',function(a,b){
console.log(a,b);});myEmitter.emit(''event'',''a'',''b'');Node有自身的事
件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录
了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/
O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制
,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/
O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知
I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O
观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、
记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察
者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得
是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件
的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回
调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待
执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信
息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。
从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件
,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/
O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程
可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事
件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行
完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,
Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对
应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会
修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是
以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O
线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对
象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱
动来实现异步I/O的教师:王晓玲QQ:4260924邮箱:4260924@qq.
comNode.js开发主要内容异步函数定义异步与同步函数比较Node中的异步APINode中的
事件事件示例传统的同步函数传统的同步函数回调函数,采用按顺序的方式一步一步执行,例如:functioncooking(
cb){console.log(''妈妈认真做饭'');if(cb&&typeofcb===''function''){
console.log(''小明快过来,开饭啦'')cb();}}functionread(){
console.log(''小明假装正在读书'');}functioneat(){console.log(''好的,我开动
咯'');}cooking(eat);read();运行结果:妈妈认真做饭小明快过来,开饭啦好的,我开动咯小明假装
正在读书异步函数的定义在回调函数执行时加入setTimeout之后,函数的执行顺序会发生变化吗?functionea
t(){console.log(''好的,我开动咯'');}functioncooking(cb){consol
e.log(''妈妈认真做饭'');setTimeout(function(){console.log(''小明快过
来,开饭啦'')cb();},1000);}functionread(){console.log(''
小明假装正在读书'');}cooking(eat);read();运行结果:妈妈认真做饭小明假装正在读书小明快过来,开
饭啦好的,我开动咯异步函数的定义基本的方法就是,在函数定义里面调用提供的异步api(不管是原生的还是第三方的),自定义
的函数也就是个异步函数了:functionfoo(callback){你自己的代码;asyncFn(
function(){varresult=你自己的代码;callback(re
sult);});}定义一个函数foo,里面调用了一个异步函数asyncFn,在asyncFn运行完了之后调用fo
o的回调函数callback,来对结果result进行处理。异步和同步比较1.异步函数functionfoo(callba
ck){你自己的代码;asyncFn(function(){varresult
=你自己的代码;callback(result);});}异步函数中通过回调函数对结果
result进行处理。2.同步函数functionfoo(){vara=3,b
=2;returna+b;}varc=foo();console.log(c);//5传统的
同步函数需要返回一个结果,通过return语句实现Node中异步APInode中的非IO的异步API提供了四种方法,分别为se
tTimeOut(),setInterval(),setImmediate()以及process.nextTick(),四种方法实
现原理相似,但达到的效果略有区别。它们的用法分别是:1.setTimeOut(function(){},1000);2.set
Interval(function(){},1000);3.setImmediate(function(){});4.proc
ess.nextTick(function(){});除在用法上的差异外,它们还有那些区别呢?Node中异步APInode
.js的基于事件循环的事件模型,正是因为它才使得node.js中回调函数十分普遍,也正是基于此,node.js实现了单线程高效的异
步IO(这里说的单线程主要说的是执行javascript代码部分的线程,而异步IO部分node.js其实还是利用线程池去执行的)。
简单的讲就是,在node.js启动时,创建了一个类似while(true)的循环体,每次执行一次循环体称为一次tick,每个ti
ck的过程就是查看是否有事件等待处理,如果有,则取出事件极其相关的回调函数并执行,然后执行下一次tick。所以,有如下代码:A(
);B();C();Node中异步APINode中的事件循环逻辑如下:Node中异步APINode中的观察者:在每个
tick的过程中,如何判断是否有事件需要处理呢?观察者。每个事件循环中都有一个或者多个观察者,而判断是否有事件要处理的过程就是向
这些观察者询问是否有要处理的事件。事件循环是一个典型的生产者/消费者模型。异步I/O、网络请求等则是事件的生产者,源源不断为nod
e提供事件,这些事件被传递到对应的观察者那里,时间循环从观察者那里取出事件并处理。Node中异步APINode中的请求对象:
请求对象是异步I/O过程中的重要中间产物,所有的状态都保存在这个对象上,包括送入线程池等待执行以及I/O操作完毕后的回调函数。N
ode中异步API执行回调事件循环、观察者、请求对象、I/O线程池共同构成了node的异步I/O模型
的基本要素。Node中异步APIsetTimeOut(),setInterval(),setImmediate()以及pro
cess.nextTik()三者的优先级三种观察者的优先级顺序是:idle观察者>>io观察者>check观察者setTime
out采用的是类似IO观察者setImmediate采用的是check观察者process.nextTick()采用的是idl
e观察者Node中异步APIprocess.nextTick()与setImmediate()和setTimeout()的区
别如下:1、原始代码:A();B();C();执行顺序Node中异步API2、process.nextTick()
执行效果,代码如下:A();process.nextTick(B);C();执行顺序Node中异步API3、setI
mmediate()或者setTimeout()执行效果,代码如下:A();setImmediate(B);//或者setTi
meout(B,0);C();执行顺序Node中异步API结论:process.nextTick(),效率最高,消费
资源小,但会阻塞CPU的后续调用;setTimeout(),精确度不高,可能有延迟执行的情况发生,且因为动用了红黑树,所以消耗
资源大;setImmediate(),消耗的资源小,也不会造成阻塞,但效率也是最低的。Node中事件Node.js在主
线程里维护了一个事件队列,当接到请求后,就将该请求作为一个事件放入这个队列中,然后继续接收其他请求。当主线程空闲时(没有请求接入时
),就开始循环事件队列,检查队列中是否有要处理的事件,这时要分两种情况:如果是非I/O任务,就亲自处理,并通过回调函数返回到上
层调用;如果是I/O任务,就从线程池中拿出一个线程来处理这个事件,并指定回调函数,然后继续循环队列中的其他事件。Nod
e中事件当线程中的I/O任务完成以后,就执行指定的回调函数,并把这个完成的事件放到事件队列的尾部,等待事件循环,当主线程再次
循环到该事件时,就直接处理并返回给上层调用。这个过程就叫事件循环(EventLoop),其运行原理如下图所示:Node
中事件Node.js被分为了四层,分别是应用层、V8引擎层、NodeAPI层和LIBUV层。应用层:即Ja
vaScript交互层,常见的就是Node.js的模块,比如http,fsV8引擎层:即利用V8引擎来解析Jav
aScript语法,进而和下层API交互NodeAPI层:为上层模块提供系统调用,一般是由C语言来实现,和操作系统
进行交互。LIBUV层:是跨平台的底层封装,实现了事件循环、文件操作等,是Node.js实现异步的核心。Node
中事件工作原理Node.js实现异步的核心是事件,也就是说,它把每一个任务都当成事件来处理,然后通过EventLoop
模拟了异步的效果,为了更具体、更清晰的理解和接受这个事实,下面我们用伪代码来描述一下其工作原理:1.定义事件队列(先进先出
(FIFO)的数据结构)/定义事件队列入队:push()出队:shift()空队列:len
gth==0/globalEventQueue:[]Node中事件工作原理2.定义接收请求入口/
接收用户请求每一个请求都会进入到该函数传递参数request和response/processHttpRe
quest:function(request,response){//定义一个事件对象varevent
=createEvent({params:request.params,//传递请求参数
result:null,//存放请求结果callback:function(){}//指定回调函数
});//在队列的尾部添加该事件globalEventQueue.push(event);}No
de中事件工作原理3.定义EventLoopeventLoop:function(){//如果队列不为空,就继
续循环while(this.globalEventQueue.length>0){//从队列的头
部拿出一个事件varevent=this.globalEventQueue.shift();
//如果是耗时任务if(isIOTask(event)){//从线程池里拿出一
个线程varthread=getThreadFromThreadPool();
//交给线程处理thread.handleIOTask(event)}else
{//非耗时任务处理后,直接返回结果varresult=handle
Event(event);//最终通过回调函数返回给V8,再由V8返回给应用程序
event.callback.call(null,result);}}}/事件循环
主体,主线程择机执行循环遍历事件队列处理非IO任务处理IO任务执行回调,返回给上层/Nod
e有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个
请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处
理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的
事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记
录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I
/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机
制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I
/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通
知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/
O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态
、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观
察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取
得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事
件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行
回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有
待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等
信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。
从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事
件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I
/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流
程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有
事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执
行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出
,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用
对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,
会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node
是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/
O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求
对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为
驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行
,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行
状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现
异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生
产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通
知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O
的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求
对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环
系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Nod
e有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个
请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处
理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的
事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记
录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I
/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机
制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I
/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通
知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/
O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态
、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观
察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取
得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事
件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行
回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有
待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等
信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。
从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事
件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I
/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流
程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有
事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执
行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出
,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用
对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,
会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node
是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/
O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求
对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为
驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行
,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行
状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现
异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生
产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通
知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O
的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求
对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环
系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Nod
e有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个
请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处
理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的
事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记
录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I
/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机
制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I
/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通
知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/
O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态
、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观
察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取
得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事
件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行
回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有
待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等
信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。
从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事
件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I
/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流
程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有
事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执
行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出
,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用
对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,
会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node
是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/
O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求
对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为
驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行
,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行
状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现
异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生
产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通
知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O
的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求
对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环
系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Nod
e有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个
请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处
理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的
事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记
录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I
/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机
制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I
/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通
知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/
O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态
、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观
察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取
得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事
件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行
回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有
待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等
信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。
从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事
件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I
/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流
程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有
事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执
行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出
,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用
对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,
会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node
是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/
O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求
对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为
驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行
,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行
状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现
异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生
产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通
知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O
的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求
对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环
系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Nod
e有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个
请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处
理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的
事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记
录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I
/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机
制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的Node有自身的事件循环机制,从I/O观察中取得是否还有待执行的事件,如果有事件,调用对应的I/O线程执行,这时会生产一个请求对象,这个请求对象记录了提交I/O的状态、记录了事件的回调等信息,在I/O线程执行完毕后,会修改请求对象的执行状态,并通知事件循环系统,将处理完成的I/O信息通知I/O观察者,执行回调函数。从上述流程可以看出,Node是以事件为驱动来实现异步I/O的
献花(0)
+1
(本文系中转站199首藏)