Node採用V8引擎處理JavaScript腳本,最大特色就是單線程運行,一次只能運行一個任務。這致使Node大量採用異步操做(asynchronous opertion),即任務不是立刻執行,而是插在任務隊列的尾部,等到前面的任務運行完後再執行。因爲這種特性,某一個任務的後續操做,每每採用回調函數(callback)的形式進行定義。so也不適用於try catch捕獲錯誤,約定回調函數的第一個參數爲爲error對象。javascript
V8引擎將Buffer對象佔用的內存,解釋爲一個整數數組,而不是二進制數組。因此,new Uint32Array(new Buffer([1, 2, 3, 4])),生成的Uint32Array數組是一個4個成員的Uint32Array數組,而不是隻有單個成員([0x1020304]或者[0x4030201])。html
注意,這時二進制數組所對應的內存是從Buffer對象拷貝的,而不是共享的。二進制數組的buffer屬性,保留指向原Buffer對象的指針。java
二進制數組的操做,與Buffer對象的操做基本上是兼容的,只有輕微的差別。好比,二進制數組的slice方法返回原內存的拷貝,而Buffer對象的slice方法創造原內存的一個視圖(view)。即返回的新 buffer,是對原 buffer 某區段的引用,或者說新 buffer 是指針,它指向原 buffer 的某區段。node
child_process模塊用於新建子進程。子進程的運行結果儲存在系統緩存之中(最大200KB),等到子進程運行結束之後,主進程再用回調函數讀取子進程的運行結果。算法
child_process.exec(command, [options], callback) child_process.spawn(command, [args], [options])
cluster模塊容許設立一個主進程和若干個worker進程,由主進程監控和協調worker進程的運行。worker之間採用進程間通訊交換消息,cluster模塊內置一個負載均衡器,採用Round-robin算法協調各個worker進程之間的負載。運行時,全部新創建的連接都由主進程完成,而後主進程再把TCP鏈接分配給指定的worker進程。api
Events模塊的做用,還在於其餘模塊能夠部署EventEmitter接口,從而也可以訂閱和發佈消息。數組
var eventEmitter = require('events').EventEmitter;
function Dog(name) {
this.name = name;
}
Dog.prototype = Object.create(eventEmitter.prototype);
var simon = new Dog('simon');
simon.on('bark', function() {
console.log(this.name + ' barked');
});
setInterval(function() {
simon.emit('bark');
},500);
上面代碼新建了一個構造函數Dog,而後讓其繼承EventEmitter,所以Dog就擁有了EventEmitter的接口。最後,爲Dog的實例指定bark事件的監聽函數,再使用EventEmitter的emit方法,觸發bark事件。
Node內置模塊util的inherits方法,提供了另外一種繼承EventEmitter的寫法。緩存
事件類型
Events模塊默認支持兩個事件。
newListener事件:添加新的回調函數時觸發。
removeListener事件:移除回調時觸發。markdown
參考
nodejs官網:https://nodejs.org/dist/latest-v4.x/docs/api/querystring.html;
阮一峯Nojs.API中文版:http://javascript.ruanyifeng.com/nodejs/負載均衡