1. 异步编程的基础 -- 函数式编程

  (1)高阶函数 -- 是可以把函数作为参数,或是将函数作为返回值的函数。

  (2)偏函数用法 -- 创建一个调用另外一个部分 -- 参数或变量已经预置的函数 -- 的函数(通过指定部分参数来产生一个新的定制函数的形式就是偏函数)。

2. 异步编程的优势与难点

  (1)优势:

    基于事件驱动的非阻塞I/O模型。

  (2)劣势:

    A. 异常处理 -> 必须执行调用者传入的回调函数,正确传递回异常调用者判断。

    B. 函数嵌套过深

    C. 阻塞代码

    D. 多线程编程

    E. 异步转同步

3. 异步编程解决方案

  (1)事件发布/订阅模式(事件监听器模式)-- 常常用来解耦业务逻辑,事件发布者无需关注订阅的侦听器如何实现业务逻辑,甚至都不用关注有多少个侦听器存在,数据通过消息的方式可以很灵活的传递。

    event模块:addListener/on()、once()、removeListener()、emit()等基本的事件监听模式的方法实现。

// 订阅
emitter.on("event1",function(message){
console.log(message);
}) // 发布
emitter.emit("event","I am message!");

  (2)Promise/Deferred模式 -- 先执行异步调用,延迟传递处理的方式

    Promise作用于外部,通过then()方法暴露给外部以添加自定义逻辑。

    Deferred主要用于内部,用于维护异步模型的状态。

  (3)流程控制库

    A. 尾触发 应用最多的地方是Connect的中间件 -- 十分适合处理网络请求的场景。将复杂的处理逻辑拆解为简介、单一的处理单元,逐层次地处理请求对象和响应对象。

    B. async -- 提供了20多个方法用于处理异步的各种协作模式

      异步的串行执行

      异步的并行执行

      异步的调用依赖处理

      自动依赖处理

    C. Step -- 知名流程控制库,比async更轻量

    D. wind

4. 异步并发控制

  拒绝模式

  超时控制

    

【读书笔记】《深入浅出nodejs》第四章 异步编程的更多相关文章

  1. Linux读书笔记第三、四章

    第三章 主要内容: 进程和线程 进程的生命周期 进程的创建 进程的终止 1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的. Li ...

  2. 《深入浅出Node.js》第4章 异步编程

    @by Ruth92(转载请注明出处) 第4章 异步编程 Node 能够迅速成功并流行起来的原因: V8 和 异步 I/O 在性能上带来的提升: 前后端 JavaScript 编程风格一致 一.函数式 ...

  3. Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段

    原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...

  4. 【读书笔记】C#高级编程 第十三章 异步编程

    (一)异步编程的重要性 使用异步编程,方法调用是在后台运行(通常在线程或任务的帮助下),并不会阻塞调用线程.有3中不同的异步编程模式:异步模式.基于事件的异步模式和新增加的基于任务的异步模式(TAP, ...

  5. Unity Shader入门精要读书笔记(一)序章

    本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...

  6. 读书笔记: 深入浅出node.js

    >> 深入浅出node.js node.js是c++编写的js运行环境 浏览器: 渲染引擎 + js引擎 后端的js运行环境 node.js用google v8引擎,同时提供很多系统级的A ...

  7. The Art of Multiprocessor Programming读书笔记 (更新至第3章)

    这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记.目前有关共享内存并发同步相关的书籍并不多,但是学术文献却不少,跨越的时 ...

  8. 《C#并行编程高级教程》第9章 异步编程模型 笔记

    这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...

  9. [读书笔记2]《C语言嵌入式系统编程修炼》

    第3章 屏幕操作   3.1 汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示&qu ...

随机推荐

  1. dbForge mysql数据库比对

    Comparison选项卡,新建一个表结构比较, (将source库的表结构变化应用到target库) 下面示例中,source用positec_uat,     target用positec_pro ...

  2. Web端测试

    一.功能测试 1.链接测试      1)所有链接是否按指示的那样,链接正确?      2)所有链接是否存在?      3)保证Web应用系统上没有孤立的页面? 在线链接测试地址:http://v ...

  3. Spring---Bean使用外部属性文件

    在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和 Bean 配置相分离 Spring 提供了 ...

  4. Linux命令:tac

    全称:concatenate and print files in reverse 用途:将文件全部内容从尾到头反向连续输出到标准输出(屏幕)上 格式:tac [OPTION]... [FILE].. ...

  5. Codeforces441B_Valera and Fruits(暴力)

    Valera and Fruits time limit per test 1 second memory limit per test 256 megabytes input standard in ...

  6. git mv与直接mv的区别

    git mv 行为: 1.创建一个和之前文件内容一样的文件,文件名为新的文件名 2.将原来的文件删除 3.将删除的文件添加到暂存区 4.将新建的文件添加到暂存区 $ git mv a a1 $ git ...

  7. Spark2.0机器学习系列之3:决策树

    概述 分类决策树模型是一种描述对实例进行分类的树形结构. 决策树可以看为一个if-then规则集合,具有“互斥完备”性质 .决策树基本上都是 采用的是贪心(即非回溯)的算法,自顶向下递归分治构造. 生 ...

  8. Spark2.0机器学习系列之2:基于Pipeline、交叉验证、ParamMap的模型选择和超参数调优

    Spark中的CrossValidation Spark中采用是k折交叉验证 (k-fold cross validation).举个例子,例如10折交叉验证(10-fold cross valida ...

  9. yii2美化url

    http://blog.csdn.net/xundh/article/details/45418265

  10. java通过url抓取网页数据

    在很多行业中,要对行业数据进行分类汇总,及时分析行业数据,对于公司未来的发展,有很好的参照和横向对比.所以,在实际工作,我们可能要遇到数据采集这个概念,数据采集的最终目的就是要获得数据,提取有用的数据 ...