異步編程的優點和難點

 

傳統解決方式:

  • 多線程: 多線程上下文切換問題,鎖問題,同步問題
  • c/c++手動完成:門檻較高

node基於事件的非阻塞編程

優點:

  • 非阻塞I/O能夠使CPU與I/O並不依賴,能夠更大程度的利用資源html

  • 對於網絡應用,並行帶來的優點更大,利於分佈式和雲的應用node

  • 因爲調用了c/c++的擴展模塊,node的性能較高c++

難點:

  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. 回調過多 解決方案異步編程的優點和難點-多異步之間的協做方案
相關文章
相關標籤/搜索