Node.js中非阻塞IO和事件循环机制是如何协同工作的?
- 内容介绍
- 文章标签
- 相关推荐
本文共计891个文字,预计阅读时间需要4分钟。
Node.js的主要特点+单线程、非阻塞I/O、事件驱动,这三个特点是相互辅助的。
Node.js为了在低硬件服务器条件下实现高并发,尽量减少内存消耗,选择了单线程;
因为只有一个线程,所以必须非阻塞I/O,以避免阻塞主线程;
事件驱动则可以让Node.js高效地处理多个I/O操作,进一步提升并发能力。
Node.js的主要特点
单线程、非阻塞I/O、事件驱动,这三个特点是相辅相成的。
Node为了在低硬件服务器条件下高并发,所以减少了内存消耗,选择单线程;
因为只有一个线程,所以必须非阻塞I/O,每件事情都有回调函数;
为了合理调度,Node使用了事件环的机制,采用事件驱动来调度事件。
非阻塞I/O
I/O是输入(input)、输出(output)的简称。
阻塞I/O和非阻塞I/O的区别在于系统在输入与输出的期间,能不能接收输入。
举个例子:餐厅服务员招待客人
阻塞I/O:餐厅有多个服务员(多线程),一个服务员对应一个客人,客人从点菜到点菜结束的期间,服务员都会被闲置不做任何事情,直到这桌客人点完菜,服务员才能招待下一桌客人。
非阻塞I/O:餐厅有一个服务员(单线程),服务员招待一桌客人时,对客人说:“你先看下菜单,好了就叫我”。
本文共计891个文字,预计阅读时间需要4分钟。
Node.js的主要特点+单线程、非阻塞I/O、事件驱动,这三个特点是相互辅助的。
Node.js为了在低硬件服务器条件下实现高并发,尽量减少内存消耗,选择了单线程;
因为只有一个线程,所以必须非阻塞I/O,以避免阻塞主线程;
事件驱动则可以让Node.js高效地处理多个I/O操作,进一步提升并发能力。
Node.js的主要特点
单线程、非阻塞I/O、事件驱动,这三个特点是相辅相成的。
Node为了在低硬件服务器条件下高并发,所以减少了内存消耗,选择单线程;
因为只有一个线程,所以必须非阻塞I/O,每件事情都有回调函数;
为了合理调度,Node使用了事件环的机制,采用事件驱动来调度事件。
非阻塞I/O
I/O是输入(input)、输出(output)的简称。
阻塞I/O和非阻塞I/O的区别在于系统在输入与输出的期间,能不能接收输入。
举个例子:餐厅服务员招待客人
阻塞I/O:餐厅有多个服务员(多线程),一个服务员对应一个客人,客人从点菜到点菜结束的期间,服务员都会被闲置不做任何事情,直到这桌客人点完菜,服务员才能招待下一桌客人。
非阻塞I/O:餐厅有一个服务员(单线程),服务员招待一桌客人时,对客人说:“你先看下菜单,好了就叫我”。

