node.js 异步I/O

因为学习了一段时间的node.js了,发现如果对Node.js的原理不理解,很影响编程,所以便看了很多博客和书,包括大名鼎鼎的朴灵的《node.js深入浅出》还有《计算机操作系统》让我对node.js的原理有了更好的理解,把我的一些理解记录一下,也希望对正在学习node.js的道友有所帮助

为什么需要异步呢? 因为现在的庞大的人群已经不是简单的服务器可以轻松胜任了,我们需要提高资源利用率。如果是同步的话,当我们有两个程序之间存在前趋关系时,也就是说第二个资源对第一个资源有所依赖时,那么耗时就是两个时间之和,但我们如果使用异步,这两个资源并不存在前趋关系,第二个资源并不受第一个资源是否完成的影响,那么我们就可以享受并发的优势。极大的提高了资源利用率。

下面来说下非阻塞I/O ,非阻塞I/O和异步并不一样,解释下就是非阻塞是我的进程不会被挂起,这叫非阻塞,而异步就是在意的如何得到返回结果,举个例子,我们去买饭,大姨我要个鸡腿饭,如果是同步的话,那我们就一直在那等着,如果是异步,那我们会说,我先去坐着好了叫我,那这样看来买饭并不能耽误我对其他事情的请求,也就是我还可以做其他事,等待大姨叫我拿饭就可以了。。所以两者我倒觉得不能说以一种东西,他们所关注的地方不一样,或许只能说既然异步那肯定不存在阻塞。。

我们通过上面已经可以理解异步I/O道理是怎么回事了。那我们会想计算机中是如何实现这样的异步I/O,因为上面我们说了一个例子,也就是我们去买饭,只需要等待大姨的回复就好,不需要我们主动的去问,那计算机如何判断是否有回应呢?那边是事件轮询,计算机需要一直判断这个事件是否完全获取数据。在我使用的window下的异步调用模型IOCP和node.js的异步调用模型十分相似。内部原理采用的线程池模拟异步I/O策略。
这里写图片描述

node.js如何实现异步I/O呢?
首先我们要知道node.js本身的执行模式是-事件循环,所以回调函数在node.js应用广泛。每一次循环过程我们成为tick,每一次tick我们查看是否有事件待处理。回调函数就会在这时取出执行。而我们如何判断每个tick是否有事件还需要执行呢,这时候就需要引入观察者,通过观察者询问我们就可以知道是否有事件要执行。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小疯疯0413

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值