阅读 64

【9.4】node 原理 - 异步 I/O - 网络请求

这是这个系列的最后一篇文章,主要介绍网络请求中的异步 I/O 处理~

第一篇文章从用户体验、资源分配,这两个方面介绍了我们为什么需要异步 I/O。这一篇文章主要讲异步 I/O 在操作系统层面的支持状况。

第二篇文章介绍了异步 I/O 在操作系统层面的支持情况,异步和非阻塞着两个概念的区别。

第三篇文章介绍了 nodejs 异步 I/O 的实现方式。

第四篇文章介绍了setTimeout 的原理,process.nextTick 和 setImmediate 对比。

我们前面介绍了异步 I/O 的实现方式,通过 fs.open 作为例子,其实对于网络请求,也是使用 I/O 观察者进行处理的,我们梳理一下这个过程:

image.png

  1. 操作系统内核监听端口,接收网络请求
  2. 将事件放入 I/O 观察者队列中
  3. libuv 中事件循环,询问 I/O 观察者是否有事件
  4. 发现有事件则执行,并且再查看是否有回调函数
  5. 有回调函数则执行,并将控制器转移会 JavaScript 中

整体的过程和文件操作类似,更详细的过程分析,可以看我前面的文章:juejin.cn/post/700246…

nodejs 不是首先创造异步 I/O 的平台,但是是第一个成功的平台。在 nodejs 之前,Ruby、Python 等都有异步 I/O 的尝试,但因为他们主打的是同步 I/O 的 api,使得异步 I/O 始终不能得以发展。nodejs 的异步 I/O 不需要有额外创建和销毁线程的开销,不受上下文切换的代价的影响,已它出色的性能优势在社区中流行。

以上是对深入浅出nodejs中的学习,异步 I/O 中网络请求的介绍,至此异步I/O这一章节学习完成,欢迎点赞和评论~

文章分类
后端
文章标签