非阻塞I/O下面我们继续看nodejs的第二个特性--非阻塞I/O(异步I/O)首先我们来看看什么是非阻塞I/O?I/O操作,在程序中,我们可以大致认为是:从数据库中读取数据,从硬盘中读写文件等。在传统的单线程阻塞I/O中(如图下图),当程序运行到I/O操作(从数据库读取数据)时,由于数据库返回数据需要一定的时间,所以此时程序会暂停,等待数据库返回数据后成功返回,程序2后面的代码可以继续执行;也就是说,I/O阻塞了代码的运行,大大降低了程序的执行效率。但是nodejs采用了非阻塞I/O机制。程序运行到I/O操作后,会立即跳转到程序2执行,并将数据库返回的数据处理程序放入回调函数中,从而提高程序的执行效率。.阻塞模式下,一个线程只能处理一个任务,必须使用多线程来提高服务器的吞吐量;在非阻塞模式下,线程一直在工作(如果事件栈中有事件的话),换句话说:这个线程的cpu利用率是100%。当I/O处理完毕,nodejs怎么知道I/O完成了呢?这里要说的是第三个特性——事件驱动。
