zoukankan      html  css  js  c++  java
  • 异步编程的优势和难点

    传统解决方式:

    • 多线程: 多线程上下文切换问题,锁问题,同步问题
    • 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. 回调过多 解决方案异步编程的优势和难点-多异步之间的协作方案
  • 相关阅读:
    Form表单提交数据的几种方式
    前端基础-HTML
    python入门函数详解
    Python作业编写
    Python入门数据类型详解
    Jquery选择器
    做外链接和有外链接区别
    三层架构
    drop,delete,truncate区别
    run()和star()区别
  • 原文地址:https://www.cnblogs.com/ranjianxi/p/8404539.html
Copyright © 2011-2022 走看看