博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异步编程的优势和难点
阅读量:5173 次
发布时间:2019-06-13

本文共 800 字,大约阅读时间需要 2 分钟。

 

传统解决方式:

  • 多线程: 多线程上下文切换问题,锁问题,同步问题
  • 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

你可能感兴趣的文章
js Grid - 列表插件
查看>>
Spring 体系结构
查看>>
20180124现货黄金操作思路
查看>>
关于游戏开发(转)
查看>>
MSSQL语句备份
查看>>
myeclipse-8.6.0下载
查看>>
【单调队列优化dp】 分组
查看>>
前端开发规范:命名规范、html 规范、css 规范、js 规范
查看>>
会话技术 cookie and session
查看>>
python 2week
查看>>
java实现中值滤波均值滤波拉普拉斯滤波
查看>>
88. 合并两个有序数组
查看>>
ASP.NET MVC 范例推荐
查看>>
mysql 笔记
查看>>
(zt)透析回调函数
查看>>
[Android]自定义控件LoadMoreRecyclerView
查看>>
W:Failed to fetch http://archive.ubuntukylin.com:10006/ubuntukylin/dists/pre
查看>>
根据条件对DataTable进行Distinct操作
查看>>
关于制作赛车游戏的一些入门知识(一)
查看>>
AI 语音对话技术
查看>>