美文网首页
学习 nodejs I /O 交互

学习 nodejs I /O 交互

作者: 小苏008 | 来源:发表于2016-08-11 09:15 被阅读0次

1 事件循环

Node的执行模型实际上是事件循环。在进程启动时,Node会创建一个无限循环,每一次执行循环体的过程成为一次Tick。每个Tick过程就是

查看是否有事件等待处理,如果有则取出事件及其相关的回调函数,若存在关联的回调函数则执行它们,然后进入下一个循环。如果不再有事件处理,就退出进程。

2 观察者

每个事件循环中有若干个观察者,通过向这些观察者询问来判断是否有事件要处理。事件循环是一个典型的生产者/消费者模型。在Node中,事件主要来

源于网络请求、文件I/O等,这些事件都有对应的网络I/O观察者、文件I/O观察者等,事件循环则从观察者那里取出事件并处理。

3 请求对象

从Javascript发起调用到内核执行完I/O操作的过渡过程中,存在一种中间产物,叫做请求对象。以最简单的Windows下

fs.open()方法(根据指定路径和参数去打开一个文件并得到一个文件描述符)为例,从JS调用到内建模块通过libuv进行系统调用,实际上是调用

了uv_fs_open()方法。在调用过程中,创建了一个FSReqWrap请求对象,从JS层传入的参数和方法都封装在这个请求对象中,其中我们最为

关注的回调函数被设置在这个对象的oncompete_sym属性上。对象包装完毕后,将FSReqWrap对象推入线程池中等待执行。

至此,JS调用立即返回,JS线程可以继续执行后续操作。当前的I/O操作在线程池中等待执行,这就完成了异步调用的第一阶段。

4 执行回调

回调通知是异步I/O的第二阶段。线程池中的I/O操作调用完毕后,会将获取的结果储存起来,然后通知IOCP当前对象操作已完成,并将线程归还线

程池。在每次Tick的执行中,事件循环的I/O观察者会调用相关的方法检查线程池中是否有执行完的请求,如果存在,会将请求对象加入到I/O观察者的队

列中,然后将其当做事件处理。

相关文章

  • 学习 nodejs I /O 交互

    1 事件循环 Node的执行模型实际上是事件循环。在进程启动时,Node会创建一个无限循环,每一次执行循环体的过程...

  • 第六天笔记

    NodeJs I/O 键盘交互 阻塞代码实例 创建一个文件 input.txt ,内容如下: 创建 main.js...

  • nodejs是什么

    nodejs是什么 nodejs是js runtime使用事件驱动 和 非阻塞I/O 模型 非阻塞I/O 阻塞:...

  • I/O交互,web交互(8.10)

    I/O交互 终端交互使用

  • 多线程同步I/O与单线程异步I/O(笔记)

    学习nodejs时,看到它的简介说它是采用异步I/O与事件驱动的架构设计,搜了很多关于同步I/O和异步I/O的资料...

  • 全站工程师 05 笔记

    node.js 的 I/O交互 I/O 是什么?I 是input (要监听的可读流) .,O是output(要写...

  • Nodejs Event Loop

    Nodejs 特点 Nodejs 是非阻塞I/O、事件与回调函数、单线程、跨平台 Nodejs 执行流程 Node...

  • I/O流入门

    I/O I/O是任何编程语言都无法回避的问题,I/O是人机交互的核心问题,因为I/O是机器获取和交换信息的主要渠道...

  • Windows下从零开始学习nodejs4.X+express4

    nodejs交互环境 nodejs交互环境简称 : REPL类似于Python的交互环境, nodejs的交互环境...

  • 2 Nodejs02 API

    1、Nodejs基本认知 ->高并发(异步I/O、非阻塞式I/O)、高性能(chrome v8引擎)、事件驱动单线...

网友评论

      本文标题:学习 nodejs I /O 交互

      本文链接:https://www.haomeiwen.com/subject/uqojsttx.html