Nodejs-event-loop
Node.js-イベントループ
Node.jsはシングルスレッドアプリケーションですが、 event および callbacks の概念を介して並行性をサポートできます。 Node.jsのすべてのAPIは非同期であり、シングルスレッドであるため、* async関数呼び出し*を使用して同時実行性を維持します。 ノードはオブザーバーパターンを使用します。 ノードスレッドはイベントループを保持し、タスクが完了するたびに、対応するイベントを起動し、イベントリスナー関数に実行を通知します。
イベント駆動型プログラミング
Node.jsはイベントを頻繁に使用するため、Node.jsが他の同様のテクノロジーと比較して非常に高速である理由の1つでもあります。 Nodeはサーバーを起動するとすぐに、変数を開始し、関数を宣言し、イベントが発生するのを待ちます。
イベント駆動型アプリケーションでは、通常、イベントをリッスンし、それらのイベントの1つが検出されるとコールバック関数をトリガーするメインループがあります。
イベントはコールバックに非常に似ていますが、非同期関数が結果を返すときにコールバック関数が呼び出されるという事実に違いがありますが、イベント処理はオブザーバーパターンで機能します。 イベントをリッスンする関数は、*オブザーバー*として機能します。 イベントが発生すると、そのリスナー関数の実行が開始されます。 Node.jsには、次のようにイベントとイベントリスナーをバインドするために使用されるイベントモジュールとEventEmitterクラスを通じて利用可能な複数の組み込みイベントがあります-
//Import events module
var events = require('events');
//Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
以下は、イベントハンドラをイベントにバインドするための構文です-
//Bind event and event handler as follows
eventEmitter.on('eventName', eventHandler);
次のようにプログラムでイベントを起動できます-
//Fire an event
eventEmitter.emit('eventName');
例
次のコードでmain.jsという名前のjsファイルを作成します-
//Import events module
var events = require('events');
//Create an eventEmitter object
var eventEmitter = new events.EventEmitter();
//Create an event handler as follows
var connectHandler = function connected() {
console.log('connection succesful.');
//Fire the data_received event
eventEmitter.emit('data_received');
}
//Bind the connection event with the handler
eventEmitter.on('connection', connectHandler);
//Bind the data_received event with the anonymous function
eventEmitter.on('data_received', function() {
console.log('data received succesfully.');
});
//Fire the connection event
eventEmitter.emit('connection');
console.log("Program Ended.");
今、上記のプログラムを実行し、その出力を確認してみましょう-
$ node main.js
ITは、次の結果を生成する必要があります-
connection successful.
data received successfully.
Program Ended.
ノードアプリケーションの仕組み
Node Applicationでは、非同期関数は最後のパラメーターとしてコールバックを受け入れ、コールバック関数は最初のパラメーターとしてエラーを受け入れます。 前の例をもう一度見てみましょう。 次の内容のinput.txtという名前のテキストファイルを作成します。
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!
次のコードを持つmain.jsという名前のjsファイルを作成します-
var fs = require("fs");
fs.readFile('input.txt', function (err, data) {
if (err) {
console.log(err.stack);
return;
}
console.log(data.toString());
});
console.log("Program Ended");
ここで、fs.readFile()はファイルを読み取ることを目的とする非同期関数です。 読み取り操作中にエラーが発生した場合、* errオブジェクト*には対応するエラーが含まれます。それ以外の場合、データにはファイルの内容が含まれます。 readFile は、読み取り操作の完了後にエラーとデータをコールバック関数に渡し、最終的にコンテンツを出力します。
Program Ended
Tutorials Point is giving self learning content
to teach the world in simple and easy way!!!!!