深入浅出node读书笔记(三)

  介绍完了node的模块机制,现在来说说node的一个非常有名的特色:异步I/O.

  (1)首先我们先要了解一下node自身的执行模型:事件循环.它使得回调函数十分普遍。在启动进程的时候,node创建一个类似于while(true)循环的循环体,每执行一次循环体我们成为一次tick。每个tick的过程就是查看是否有事件需要处理,如果有就看它是否有关联的回调函数,如果有,就执行回调函数,没有就进入下一个循环。直到没有事件为止,就退出流程。

此外,每个事件循环均有一个或者多个观察者,node可向其询问是否有事件需要处理。

  (2)node的事件的请求对象:

  如上图所示,在JavaScript发送异步请求后,创建了一个请求对象,从js层传过来的参数和相关方法(包括回调函数)都被封装到了这个对象里面,对象包装完毕后放入线程池等待执行。如果线程池里面有线程可用,即可执行请求对象中的I/O操作,并将执行完的结果放到请求对象中,通知IOCP调用完成,然后回到node的事件循环里面,等待回调函数执行。

  (3)非I/O的异步api:setTimeout(),setInterval(),setImmediate(),process.nextTick()

    ①setTimeout()与setInterval():调用这两个函数创建的定时器会被插入到定时器观察者内部的一个红黑树中,每次tick执行时候都会从红黑树中迭代取出定时器对象。

    ②process.nextTick():将回调函数延迟至下一次tick执行,不需要调用红黑树以及迭代过程,效率较高。

    ③setImmediate():将回调函数放到下一次tick执行。

  总结:但与process.nextTick()有区别。②的优先级高于③,因为二者所属的观察者不同。同时在具体表现上,如果多次调用对应函数,②的回调函数放在了一个数组中,下次tick全部执行一遍,而③的回调函数放在一个链               表中,每次只能执行一个。

时间: 2024-12-14 20:46:26

深入浅出node读书笔记(三)的相关文章

深入浅出node读书笔记(一)

老早就想读这本书了,可是因为这样那样的原因,总归是耽搁了,前几天一直在纠结毕业设计用什么语言来实现后端逻辑代码的问题,通过一周时间的痛苦挣扎,选择了node,于是就又开始学习node了,希望写随笔这种形式能够逼着我把node好好研究一遍. 首篇文章主要讲述该书的第一个章节,因为是读书笔记,内容可能不会很全面,大概只会写下我认为重要的东西,一些无关紧要的内容可能略过.本篇文章主要从两个方面来介绍node,分别是:node的特点以及node的使用场景. (1)node的特点: a)异步I/O:异步I

深入浅出node读书笔记(四)

本篇文章介绍Buffer相关的概念.前端JavaScript对字符串的操作相对友好,有一系列比较好用的api来操作字符串.但是如果把js挪到后端,这些api明显不够,因为node在处理的时候需要大量处理一些二进制文件,前端那些api是远远不足的,于是buffer对象应运而生. 首先,buffer模块在node启动的时候已经自动加载进去了,无需require()进去. (1)buffer对象类似数组,它的元素是16进制的两位数,都在0~255之间.用.length属性能够得到buffer的长度.我

深入浅出node读书笔记(五)

本篇文章说说JavaScript在v8引擎里面内存管理的相关问题. (1)从本质来讲,node是基于v8引擎才开发出来的,v8在给node带来一系列有点之余,也带来了一些缺陷,比如内存限制就是一个方面.因为v8的限制,node在64位机器下只能使用1.4G的内存,在32位机器下更是只能使用0.7G.v8进行内存限制是为了防止在垃圾回收时候所用时间过长导致卡顿.这在文章下边会有介绍. (2)所有的JavaScript对象都是通过堆来进行内存分配的,v8在最开始的时候有一个申请好的一块堆内存,创建j

深入浅出Nodejs读书笔记

深入浅出Nodejs读书笔记 转:http://tw93.github.io/2015-03-01/shen-ru-qian-chu-nodejs-reading-mind-map.html category:node学习笔记       2015-03-01 今天终于把朴灵老师写的<深入浅出Node.js>给学习完了, 这本书不是一本简单的Node入门书籍,它没有停留在Node介绍或者框架.库的使用层面上,而是从不同的视角来揭示Node自己内在的特点和结构.建议有一定Node基础或者做过No

《你必须知道的.NET》读书笔记三:体验OO之美

一.依赖也是哲学 (1)本质诠释:"不要调用我们,我们会调用你" (2)依赖和耦合: ①无依赖,无耦合: ②单向依赖,耦合度不高: ③双向依赖,耦合度较高: (3)设计的目标:高内聚,低耦合. ①低耦合:实现最简单的依赖关系,尽可能地减少类与类.模块与模块.层次与层次.系统与系统之间的联系: ②高内聚:一方面代表了职责的统一管理,一方面又代表了关系的有效隔离: (4)控制反转(IoC):代码的控制器交由系统控制而不是在代码内部,消除组件或模块间的直接依赖: (5)依赖注入(DI): ①

《世界是数字的》读书笔记 三

<世界是数字的>读书笔记 三 第六章 软件系统 操作系统是软件中的基础层,他负责管理计算机硬件,并为其他被称作应用程序的程序运行提供支持. 6.1操作系统 操作系统控制和分配计算机资源.首先,他负责管理CPU,调度和协调当前运行的程序.操作系统通常都需要管理数十个同时运行的进程或任务. 其次,操作系统管理RAM.他把程序加载到内存中以便执行指令. 最后,操作系统管理和协调外接设备的活动. 6.2操作系统怎么工作 计算机启动时首先要加载代码,加载的过程中还要检查硬件,比如哪些设备已经接入电脑,,

悟道—位IT高管20年的职场心经(读书笔记三)

悟道--一位IT高管20年的职场心经 第三章 世事洞明皆学问 职场就是你的大半个世界 是你一辈子也读不完的一大本书 想明白一个道理, 看明白一件事儿, 你就向成功迈进了一步. 1.1  "四行"说 四行是指: 第一,  你自己得行.自己的基础的能力是必须的,得靠自己学习. 第二,  得有人说你行.需要有伯乐,实际上是你得有一个自己的圈子,并且这些人都人认同你. 第三,  说你行的人得行.自己周围的圈子,里面也必须有牛人,只有在牛人的范围内,才能突显你自己的才能. 第四,  你身子骨得行

《R实战》读书笔记三

第二章  创建数据集 本章概要 1探索R数据结构 2使用数据编辑器 3数据导入 4数据集标注 本章所介绍内容概括如下. 两个方面的内容. 方面一:R数据结构 方面二:进入数据或者导入数据到数据结构 理解数据集 一个数据集通常由一个表格组合而成,行表示观测,列表示变量.病人的数据集如表1所示. 表1 病人数据集 数据集能够反映数据结构.数据类型和内容. 数据结构 R数据结构如图2所示. 图2:R数据结构 数据结构即数据的组织方式,R数据结构包括向量.矩阵.数组.数据框和列表等. R向量 R向量是一

《大型网站技术架构》读书笔记三:大型网站核心架构要素

一.性能—响应时间决定用户 (1)浏览器端: ①浏览器缓存: ②使用页面压缩: PS:Gzip压缩效率非常高,通常可以达到70%的压缩率,也就是说,如果你的网页有30K,压缩之后就变成了9K左右.想要启用Gzip压缩,提高浏览速度,可以浏览这篇文章:http://www.chinaz.com/web/2012/1017/278682.shtml ③合理布局页面: CSS:把样式表置于顶部:避免使用CSS表达式(expression_r):使用外部JavaScript和CSS:削减JavaScri