nodejs异步IO1.IO理解IO分类(调用后是否立即得到结果):阻塞IO:重复调用IO操作,判断IO是否结束(任务轮询:read、select、poll、kqueue、eventports)因为在轮询过程中,程序等待IO结果。对于代码来说,还是有同步效果的。非阻塞IO:实现非阻塞IO,无需判断,以信号或回调的形式返回给当前代码使用IO:放入节点实现的线程池中异步网络IO:利用核心库node的libuv库,可以判断运行平台,根据平台调用不同的异步IO处理方法(达到类似跨平台的效果)实现异步IO的过程:2.为什么要用异步IO来执行两个不同模式下的任务。显然,异步使用的时间比同步使用的时间要少。3、事件驱动架构事件轮询是异步IO的实现,异步IO结果的处理(使用事件驱动、发布订阅、观察模式),依赖于nodejs的事件库;代码级显示:constEventEmitter=require('events');constemitter=newEventEmitter();//订阅1emitter.on('event',(result)=>{console.log('event1fired');console.log(result);})//订阅2emitter.on('event',(result)=>{console.log('event2fired');})//releaseemitter.emit('event','event_result');/*resultevent1firedevent_resultevent2fired*/理解普通编码写的异步代码(订阅事件),回调函数是事件处理器,但事件的释放是由系统完成的(消除了多线程切换的cpu开销和内存开销),但是在libuv库,使用了node实现的线程池。缺点:在处理cpu密集型任务时,无法体现多核cpu的优势。该代码显示了cpu密集型任务的单线程处理。出现阻塞现象时:consthttp=require('http');functionsleepTime(time){constsleep=Date.now()+time*1000;//同步代码,等待时间while(Date.now()
