4

ワーカー dyno とバックグラウンド ジョブの使用に関するページの Heroku Dev Center には、ワーカーの + キューを使用して、RSS フィードのフェッチなどの API 呼び出しを処理する必要があると記載されています。これは、サーバーが低速でこれを実行している場合、操作に時間がかかる場合があるためです。 Web dyno では、追加のリクエストの受信がブロックされます。

しかし、私が読んだところによると、Node.js の主要なポイントの 1 つは、非同期イベント ベースのランタイム モデルにより、これらの条件下でブロックされないことです。

これは、Web dyno で API 呼び出しを (非同期で) 実行しても問題ないことを意味しないので、混乱していますか? おそらくドキュメントは、同期モデルがより普及しているRuby/Python/etcのユースケース向けに書かれているのでしょうか?

4

1 に答える 1

5

NodeJSは、reactorパターンの実装です。NodeJSのデフォルトのビルドは、5つのリアクターを使用します。これらの5つのリアクターがIOバウンドタスクに使用されると、メインイベントループがブロックされます。

NodeJSに関する一般的な誤解は、NodeJSが一度に多くのことを実行できるシステムであるというものです。これは必ずしも当てはまるわけではありません。IOバウンドタスクを待機しているときに、一度に最大5つまで他のことを実行できます。

CPUにバインドされたタスクは、常にメインイベントループで実行されます。つまり、タスクはブロックされます。

これは、データベースに物を置くなど、「ジョブ」がIOバウンドである場合、dynoを使用しないことでおそらく回避できることを意味します。もちろん、これはあなたが一度にいくつのことを計画しているのかに依存します。メインアプリに配置したタスクは、他の着信リクエストからリソースを奪うことを忘れないでください。

通常、このような場合はお勧めしません。何らかの処理を行うジョブがある場合、それは独自のプロセスまたはスレッドで実行されるキューに属します。

于 2013-01-21T15:59:31.597 に答える