快速学习nodejs系列:五、nodejs特性2--非阻塞I/O
非阻塞I/O
下面我们继续看看,nodejs的第2个特性--非阻塞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完成了?这里就要说到第3个特性了--事件驱动。
相关推荐
JamesRayMurphy 2020-05-25
starzhangkiss 2020-04-19
普罗旺斯的梦 2020-04-09
始作俑者 2020-01-19
普罗旺斯的梦 2020-01-01
xyggsddu 2019-12-26
aihenaichadeyun 2019-12-20
rareli 2019-12-16
始作俑者 2019-12-13
普罗旺斯的梦 2019-11-06
fm00 2019-11-01
普罗旺斯的梦 2019-09-13
普罗旺斯的梦 2019-09-06
kaikai 2018-11-28
范群松 2019-08-30
codingker 2019-07-11
fuziwang 2019-07-01
sunwukong 2019-06-30