Nodejs-event-loop

提供:Dev Guides
移動先:案内検索

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!!!!!