Node.jseventloopNode.js是单进程单线程应用,但是由于V8引擎提供了异步执行回调接口,通过这些接口可以处理大量的并发,所以性能非常高。几乎Node.js中的每个API都支持回调函数。Node.js基本上所有的事件机制都是通过观察者模式实现的。Node.js单线程类似于进入while(true)事件循环,直到没有事件观察者退出。每个异步事件都会生成一个事件观察器。如果事件发生时调用此回调函数。事件驱动程序Node.js使用事件驱动模型。当Web服务器收到请求时,它会关闭它并处理它,然后为下一个Web请求提供服务。当请求完成后,将其放回处理队列,当到达队列头部时,将结果返回给用户。该模型非常高效且可扩展,因为网络服务器总是在不等待任何读取或写入操作的情况下接受请求。(这也叫非阻塞IO或事件驱动IO)在事件驱动模型中,会产生一个主循环来监听事件,当检测到事件时会触发回调函数。//引入事件constevents=require('events')//创建一个eventEmitter对象consteventEmitter=newevents.EventEmitter();//创建一个时间处理器varconnectHandler=functionconnected(){console.log('连接成功')//启动data_received事件eventEmitter.emit('data_received')}//绑定连接事件处理器eventEmitter.on('connection',connectHandler)//使用匿名函数绑定data_received事件eventEmitter.on('data_received',()=>{console.log('数据接收成功。')})//触发连接事件eventEmitter.emit('connection')console.log('程序执行完毕')Node应用是如何工作的??在Node应用程序中,执行异步操作的函数将回调函数作为最后一个参数,回调函数接收一个错误对象作为第一个参数。constfs=require("fs")fs.readFile('input.txt',(err,data)=>{if(err){console.log(err)}else{console.log(data.toString())}})console.log("Theprogramexecutionisover!")我删除了这段代码的input.txt文件,所以在执行过程中,如果出现错误,errorerr对象会输出错误信息。
