【读书笔记】《深入浅出nodejs》第四章 异步编程
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》第四章 异步编程的更多相关文章
- Linux读书笔记第三、四章
第三章 主要内容: 进程和线程 进程的生命周期 进程的创建 进程的终止 1. 进程和线程 进程和线程是程序运行时状态,是动态变化的,进程和线程的管理操作(比如,创建,销毁等)都是有内核来实现的. Li ...
- 《深入浅出Node.js》第4章 异步编程
@by Ruth92(转载请注明出处) 第4章 异步编程 Node 能够迅速成功并流行起来的原因: V8 和 异步 I/O 在性能上带来的提升: 前后端 JavaScript 编程风格一致 一.函数式 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第十四章:曲面细分阶段 代码工程地址: https://github. ...
- 【读书笔记】C#高级编程 第十三章 异步编程
(一)异步编程的重要性 使用异步编程,方法调用是在后台运行(通常在线程或任务的帮助下),并不会阻塞调用线程.有3中不同的异步编程模式:异步模式.基于事件的异步模式和新增加的基于任务的异步模式(TAP, ...
- Unity Shader入门精要读书笔记(一)序章
本系列的博文是笔者读<Unity Shader入门精要>的读书笔记,这本书的章节框架是: 第一章:着手准备. 第二章:GPU流水线. 第三章:Shader基本语法. 第四章:Shader数 ...
- 读书笔记: 深入浅出node.js
>> 深入浅出node.js node.js是c++编写的js运行环境 浏览器: 渲染引擎 + js引擎 后端的js运行环境 node.js用google v8引擎,同时提供很多系统级的A ...
- The Art of Multiprocessor Programming读书笔记 (更新至第3章)
这份笔记是我2013年下半年以来读“The Art of Multiprocessor Programming”这本书的读书笔记.目前有关共享内存并发同步相关的书籍并不多,但是学术文献却不少,跨越的时 ...
- 《C#并行编程高级教程》第9章 异步编程模型 笔记
这个章节我个人感觉意义不大,使用现有的APM(异步编程模型)和EAP(基于时间的异步模型)就很够用了,针对WPF和WinForm其实还有一些专门用于UI更新的类. 但是出于完整性,还是将一下怎么使用. ...
- [读书笔记2]《C语言嵌入式系统编程修炼》
第3章 屏幕操作 3.1 汉字处理 现在要解决的问题是,嵌入式系统中经常要使用的并非是完整的汉字库,往往只是需要提供数量有限的汉字供必要的显示功能.例如,一个微波炉的LCD上没有必要提供显示&qu ...
随机推荐
- SharePoint PerformancePoint开发实例
前言 由于工作的原因,有一段时间没有发新的随笔了,最近使用了SharePoint PerformancePoint做了一些报表,与大家分享经验. 本文完全原创,转载请说明出处,希望对大家有用. 阅读目 ...
- Javaweb Tomcat 项目部署方式
一.静态部署 1.直接将web项目文件件拷贝到webapps 目录中 Tomcat的Webapps目录是Tomcat默认的应用目录,当服务器启动时,会加载所有这个目录下的应用.所以可以将JSP ...
- c# 下三角实现 九九乘法口诀表
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Hell ...
- 华为交换机忘记console的密码,怎么恢复出厂设置
第一步:一般情况下由于密码忘记我们会被阻挡在交换机telnet远程管理界面之外. 第二步:虽然可以尝试console线连接交换机的控制接口,但是很多时候这个密码也被网络管理员进行了设置,不巧的是如果这 ...
- c/c++分割字符串
c++分割字符串: http://www.martinbroadhurst.com/how-to-split-a-string-in-c.html c分割字符串: http://www.martinb ...
- 【题解】P5151 HKE与他的小朋友
[题解]P5151 HKE与他的小朋友 实际上,位置的关系可以看做一组递推式,\(f(a_i)=f(a_j),f(a_j)=f(a_t),etc...\)那么我们可以压进一个矩阵里面. 考虑到这个矩阵 ...
- Django logging模块
一.Django logging配置 1.在setting.py中配置 # 日志文件存放路径 BASE_LOG_DIR = os.path.join(BASE_DIR, "log" ...
- 过程记录:搭建wordpress站点
过程记录:搭建wordpress站点 前提:现在aws中搭建好LNAMP环境和网络mysql数据库,即为下载的wdcp和aws的rds 1.获取WordPress安装包(中文版) https://cn ...
- MySQL DBA的修炼与未来(参考篇)
转自:https://blog.csdn.net/xielingshao/article/details/77840101 MySQL DBA的修炼与未来 随着MySQL地位爆炸式的提升, MySQL ...
- GROUP BY 和 ORDER BY一起使用
转:http://lzfhope.blog.163.com/blog/static/636399220092554045196/ 环境:oracle 10g单单group by 或者order by本 ...