Nodejs-異步操做

1.阻塞javascript

console.time('main');//代碼計時器
//不斷循環阻塞了代碼的執行
for(var i=0;i<10000000;i++){

}
console.timeEnd('main');
console.log("完成執行了");

2.錯誤優先的回調函數(針對異步操做)java

   異步回調函數的設計ajax

    (1)回調函數必定做爲最後一個參數出現chrome

      funtion foo1(name,age,callback){} 多線程

      funtion foo2(value,callback1,callback2){} 異步

    (2)回調函數的第一個參數默接受錯誤信息,第二個參數纔是真正的回調數據(便於外界獲取調用的錯誤狀況)async

      callback(null,data);第一個參數通常設置爲錯誤的對象,第二個參數纔是真正的數據,null就是沒有錯誤函數

      爲何要把回調函數多加一個參數呢?性能

      由於在程序執行過程當中,有可能出現錯誤,出現錯誤要讓外界知道,採用的方式就是以參數形式傳遞(由於異步的時候,是沒法經過try catch捕獲異常,出了錯誤,外界是無法知道的)spa

      約定將錯誤信息做爲回調的第一個參數,爲上一步的錯誤信息

function isEventOrOdd(number,callback){
	if(typeof number==='number'){
		if(number%2){
			callback(null,'當前傳入的是奇數');
		}else{
			callback(null,'當前傳入的是偶數');
		}

	}
	else{
			callback(new Error('你傳入的不是數字'));
		}
}

isEventOrOdd(10,(error,data)=>{
	if(error) throw error;
	console.log(data);
});

isEventOrOdd(11,(error,data)=>{
	if(error) throw error;
	console.log(data);
});
isEventOrOdd('asda',(error,data)=>{
	if(error) throw error;
	console.log(data);
});

運行結果:

3.異步

  setTimeout()

  $.ajax()

  文件操做

  Node全部的會發生阻塞的操做都是異步的

 

4.

  Node採用chrome V8引擎處理JavaScript腳本,V8最大的特色就是單線程運行,一次只能運行一個任務

  Node大量採用異步操做(asynchronous operation),即任務不是立刻執行,而是插在任務隊列尾部,等到前面的任務運行完以後再執行

  提升代碼的響應能力

  多線程的缺點:

  (1)建立線程耗費資源

  (2)線程數量有限

  (3)CPU在不一樣線程之間轉換,有個上下文轉換,這個轉換很是耗時間

  Node最大的性能優點,就是單線程

相關文章
相關標籤/搜索