node.js的event loop

如果对javascript有深入了解,那么建议进行node.js的开发,因为node.js是服务器端javascript的一个极其优秀的环境

你可以用javascript进行服务器端的开发,而不仅仅是进行浏览器端的开发。

说到nodejs,不得不说为什么nodejs能在服务器端开发中得到广泛的支持,这主要源于其处理问题的思路,他充分的利

用了事件驱动的模型,使得资源得到最大的利用。另外他采用javascript这门语言,我们知道javascript是单线程的,那么

这就为开发带来了便利,因为多线程的开发很容易出现各种问题。这种简单且效率较高的开发模式自然得到了广泛的关注。

那么到底nodejs是如何实现这种功能的呢?下图可以大致说明这一点。nodejs有一个单一的线程叫event loop线程,

所有请求以及同时传入的回调函数均发送至这一线程,该线程负责在 I/O执行完毕后,将结果返回给回调函

数。这里要注意的是 I/O 操作本身并不在该线程内执行,因为I/O不是nodejs该线程的一部分所以不会阻塞

续请求。

也就是说,在单线程模式下,当然会出现堵塞,但这种堵塞不是因为I/O的读取引起,而是执行代码本身

引起,因为单线程一次只能处理单个代码。但是在I/O执行期间,我们不必等待I/O读取完毕后进行后续操作,

而是继续执行下面的代码。当I/O读取完毕并返回结果时,由于我们设置了回调函数,也即是在某个时间发生

时要执行的函数,如果此时线程空闲,那么就可以立即执行该函数,这就是事件驱动的机制。

nodejs利用事件驱动实现了单线程下的非堵塞,所以才能得到认可。

图 1. Event loop




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值