传统解决方式:

  • 多线程: 多线程上下文切换问题,锁问题,同步问题
  • c/c++手动完成:门槛较高

node基于事件的非阻塞编程

优势:

  • 非阻塞I/O可以使CPU与I/O并不依赖,可以更大程度的利用资源

  • 对于网络应用,并行带来的优势更大,利于分布式和云的应用

  • 由于调用了c/c++的扩展模块,node的性能较高

难点:

  1. 异常处理

    1. 不能使用try/catch/final对异步编程进行异常处理,因为发生异常的代码不一定在本次事件循环中执行,所以有可能捕捉不到

      解决方法:给callback第一个参数传递是否报错,未报错则返回null报错则返回error对象。

      原则:在编写自定义异步方法时,必须执行调用者传入的参数,必须正确返回参数callback(null, results)

    2. 对用户调用的回调函数进行try/catch

      try {req.body = JSON.parse(buf, options.reviver);callback();
      } catch (err){err.body = buf;err.status = 400;callback(err);
      }

      这样就会导致callback中出错也会被catch到,导致调用两次callback

      解决方法:

      try {req.body = JSON.parse(buf, options.reviver);
      } catch (err){err.body = buf;err.status = 400;callback(err);
      }
      callback();
  2. 阻塞代码:不要用while来阻塞,用setTimeout

  3. 多线程:用child_process

  4. 回调过多 解决方案异步编程的优势和难点-多异步之间的协作方案

转载于:https://www.cnblogs.com/ranjianxi/p/8404539.html

异步编程的优势和难点相关推荐

  1. [进阶] --- Python3 异步编程详解(史上最全篇)

    [进阶] - Python3 异步编程详解:https://blog.csdn.net/lu8000/article/details/45025987 参考:http://aosabook.org/e ...

  2. [转][进阶]-Python3 异步编程详解

    目录 1 什么是异步编程 1.1 阻塞 1.2 非阻塞 1.3 同步 1.4 异步 1.5 并发 1.6 并行 1.7 概念总结 1.8 异步编程 1.9 异步之难(nán) 2 苦心异步为哪般 2. ...

  3. [进阶]-Python3 异步编程详解(史上最全篇)

    目录 1 什么是异步编程 1.1 阻塞 1.2 非阻塞 1.3 同步 1.4 异步 1.5 并发 1.6 并行 1.7 概念总结 1.8 异步编程 1.9 异步之难(nán) 2 苦心异步为哪般 2. ...

  4. 深入理解Python异步编程

    声明:本文为转载内容 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它.而使用它的同学,则大多数都停留在知道如何使用 Tornado.Twisted. ...

  5. 深入理解 Python 异步编程

    原文地址:点击打开链接 来源:阿驹(微信公号:驹说码事) 如有好文章投稿,请点击 → 这里了解详情 前言 很多朋友对异步编程都处于"听说很强大"的认知状态.鲜有在生产项目中使用它. ...

  6. Python3 异步编程详解

    1 什么是异步编程 1.1 阻塞 程序未得到所需计算资源时被挂起的状态. 程序在等待某个操作完成期间,自身无法继续干别的事情,则称该程序在该操作上是阻塞的. 常见的阻塞形式有:网络I/O阻塞.磁盘I/ ...

  7. java 并发 异步_Java并发 CompletableFuture异步编程的实现

    前面我们不止一次提到,用多线程优化性能,其实不过就是将串行操作变成并行操作.如果仔细观察,你还会发现在串行转换成并行的过程中,一定会涉及到异步化,例如下面的示例代码,现在是串行的,为了提升性能,我们得 ...

  8. Boost.Asio基础(五) 异步编程初探

    异步编程 本节深入讨论异步编程将遇到的若干问题.建议多次阅读,以便吃透这一节的内容,这一节是对整个boost.asio来说是非常重要的. 为什么须要异步 如前所述,通常同步编程要比异步编程更简单.同步 ...

  9. 第二十一章 异步编程

    异步编程的常规方法的问题是异步程序要么做完所有的事情,要么一件事也没有做完.重写所有的代码是为了保证程序不会阻塞,否则只是在浪费时间. -------Alvaro Videla & Jason ...

  10. 【Java并发编程实战】(十七):Future和CompletableFuture的原理及实战——异步编程没有那么难

    文章目录 引言 生活中的例子 场景1 场景2 Java中的Future 如何获取Future Future的主要方法及使用 Future的核心源码 Future模式的高阶版本-- Completabl ...

最新文章

  1. 深入浅出PHP(Exploring PHP)
  2. B2B2C多用户商城就等于零售吗?什么是新零售?新零售有哪些特点?
  3. 批量过滤删除AD中的对象
  4. laravel 图片流_laravel实现上传图片的两种方式小结
  5. 超干货 | 硅谷产品大师 Marty Cagan 70 分钟演讲2万字中译
  6. 选对工具,你也能做出别人家的酷炫大屏
  7. 在centos服务器上运行第一个Helloworldjava程序
  8. maven中scope属性的
  9. Linux eBPF 程序构成与通信原理
  10. Ubuntu20.4安装YouCompleteMe
  11. Amoeba-mysql开源项目高可用读写分离
  12. 潜意识、读懂行为、说服的艺术
  13. 字符串 kmp算法解析
  14. IPSEC ×××实验(一)
  15. 上位机plc编程入门_图解PLC编程入门
  16. DEDECMS三级导航动态调用
  17. cenos7开启SMB文件共享,小米摄像头无法搜索到的原因
  18. 塞班(Symbian)开源了(包括Symbian 3和S60等)
  19. pytorch实现股票预测
  20. Windows 10 无法设置代理

热门文章

  1. java 开发时常用的工具类包 commons-lang3
  2. [蓝桥杯]PREV-12.历届试题_危险系数
  3. JS学习笔记——JavaScript继承的6种方法(原型链、借用构造函数、组合、原型式、寄生式、寄生组合式)...
  4. bzoj1029题解
  5. 5-21 求前缀表达式的值(25分)
  6. webGL学习笔记一
  7. MySQL学习笔记( 整理中)
  8. java几种远程服务调用协议的比较
  9. 转发 JBPM工作流小结
  10. Extjs Ext.net中的常用属性