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. 在nginx启动后,如果我们要操作nginx,要怎么做呢 别增加无谓的上下文切换 异步非阻塞的方式来处理请求 worker的个数为cpu的核数 红黑树

    nginx平台初探(100%) — Nginx开发从入门到精通 http://ten 众所周知,nginx性能高,而nginx的高性能与其架构是分不开的.那么nginx究竟是怎么样的呢?这一节我们先来 ...

  2. 并发编程 - 进程 - 1.互斥锁/2.模拟抢票/3.互斥锁与join区别

    1.互斥锁: 互斥锁:Lock 原理就是把并发变成串行,一个一个运行,不错乱,但效率低 保证多个进程修改一块数据时,大家是一个一个修改,不错乱 mutex.acquire() mutex.releas ...

  3. SpringBoot 之数据访问

    1. Spring Boot 与 JDBC 默认使用 org.apache.tomcat.jdbc.pool.DataSource 数据源; // application.yml spring: da ...

  4. FileZilla使用

    FileZilla是一个免费开源的FTP软件,分为客户端版本和服务器版本,具备所有的FTP软件功能.可控性.有条理的界面和管理多站点的简化方式使得Filezilla客户端版成为一个方便高效的FTP客户 ...

  5. 宏表达式与函数、#undef、条件编译、

    宏表达式在预编译期被处理,编译器不知道宏表达式的存在. 宏表达式没有任何的调用开销 宏表达式中不能出现递归定义. C语言中强大的内置宏 __FILE__:被编译的文件名 //双底线 __LINE__: ...

  6. Git的安装和设置

    1.客户端下载 首先可以在https://git-scm.com/downloads下载客户端,进行安装. 2.安装 安装比较简单,可以直接默认一步一步往下安装即可: 3.配置github的ssh秘钥 ...

  7. boost编译很慢的解决方法

    场景:使用boost库的正则模块时出现编译超慢的情况,看了头文件 #include <boost/regex.hpp> 的引用关系,它依赖的头文件相当多,这应该就是根本原因吧. 目前知道可 ...

  8. sqlserver 2005/2008 导入超大sql文件

    SQLCMD -E -dmaster -ic:\Scripts\create_db.sql 安装了Microsoft® SQL Server® 2008 R2 Native Client可用

  9. yii2 框架中的即点即改入库

    视图层 <td><span class='num'  id="<?php echo $value['goods_attr_id']?>">< ...

  10. hibernate的事务和spring事务的区别 (转)

    spring事务: 对于传统的基于特定事务资源的事务处理而言(如基于JDBC的数据库访问),Spring并不会对其产生什么影响,我们照样可以成功编写并运行这样的代码.同时,Spring还提供了一些辅助 ...