nodeJs学習ノート(2)---事件
2416 ワード
ご存知のように、nodeJsは高性能のウェブサイトを建てられますが、どうしてnodeJsの性能がとても高いですか?
Node.jsはシングルプロセスの単一スレッドアプリケーションですが、イベントとコールバックによって同時にサポートされていますので、性能は非常に高いです.また、NodeJsのAPIはすべて非同期であり、独立したスレッドとして実行され、非同期関数を使用して呼び出し、同時に処理される.(nodeJsのイベントはデザインモードで観察者モードを採用しています)
イベントドライバ
あるイベントのためにコールバックを登録しました.イベントが発生した時にコールバック関数を実行します.これはイベントドライバです.このようなチューニングの方式はioをブロックしないことができて、それによって高い性能の目的を達成します.
このモデルは非常に高い効率の拡張可能性があり、webserverは任意の読み書き操作を待たずに要求を受け入れているからです.イベント駆動モデルにおいて、イベントを傍受するメインループが生成され、イベントが検出された場合には、コールバック関数がトリガされる.
EventEmitter
Node.jsのすべての非同期I/O操作は、完了時にイベントをイベントキューに送信します.Node.jsの中の多くのオブジェクトはイベントを配布します.net.Serverオブジェクトは新しい接続があるたびにイベントを配信します.fs.readStreamオブジェクトはファイルが開かれる時にイベントを送信します.これらのイベントの対象はすべてevents.EventEmitterの例です.
EventEmitterの核心はイベントトリガとイベントモニター機能のパッケージです.
EventEmitterデフォルトでは最大10個のイベントを結びつけることができます.次のevent.jsの例:
0 9
Node.jsはシングルプロセスの単一スレッドアプリケーションですが、イベントとコールバックによって同時にサポートされていますので、性能は非常に高いです.また、NodeJsのAPIはすべて非同期であり、独立したスレッドとして実行され、非同期関数を使用して呼び出し、同時に処理される.(nodeJsのイベントはデザインモードで観察者モードを採用しています)
イベントドライバ
あるイベントのためにコールバックを登録しました.イベントが発生した時にコールバック関数を実行します.これはイベントドライバです.このようなチューニングの方式はioをブロックしないことができて、それによって高い性能の目的を達成します.
このモデルは非常に高い効率の拡張可能性があり、webserverは任意の読み書き操作を待たずに要求を受け入れているからです.イベント駆動モデルにおいて、イベントを傍受するメインループが生成され、イベントが検出された場合には、コールバック関数がトリガされる.
EventEmitter
Node.jsのすべての非同期I/O操作は、完了時にイベントをイベントキューに送信します.Node.jsの中の多くのオブジェクトはイベントを配布します.net.Serverオブジェクトは新しい接続があるたびにイベントを配信します.fs.readStreamオブジェクトはファイルが開かれる時にイベントを送信します.これらのイベントの対象はすべてevents.EventEmitterの例です.
EventEmitterの核心はイベントトリガとイベントモニター機能のパッケージです.
EventEmitterデフォルトでは最大10個のイベントを結びつけることができます.次のevent.jsの例:
var EventEmitter = require('events').EventEmitter;
var life = new EventEmitter();
life.setMaxListeners(11);
//addEventListener
function sleep(who){
console.log(who + ' is sleepping');
}
life.on('life', sleep);
life.on('life', function(who) {
console.log(who + ' is writing');
})
life.on('life', function(who) {
console.log(who + ' is working');
})
life.on('life', function(who) {
console.log(who + ' is coding');
})
life.on('life', function(who) {
console.log(who + ' is running');
})
life.on('life', function(who) {
console.log(who + ' is reading');
})
life.on('life', function(who) {
console.log(who + ' is playing');
})
life.on('life', function(who) {
console.log(who + ' is eatting');
})
life.on('life', function(who) {
console.log(who + ' is drinking');
})
life.on('life', function(who) {
console.log(who + ' is hunging');
})
life.on('anotherlife', function(who) {
console.log(who + ' is anotherlife one');
})
life.on('anotherlife', function(who) {
console.log(who + ' is anotherlife two');
})
//
life.removeListener('life',sleep);
//
console.log(life.listeners().length);
console.log(EventEmitter.listenerCount(life,'life'));
//
life.removeAllListener('life');
//
var hasLifeListener = life.emit('life','Jocelyn');
コンソールの出力は以下の通りです.0 9