web-dev-qa-db-ja.com

Node.jsスポーンと実行

私がNodeを学ぶために見ているオンライントレーニングビデオで、ナレーターは「スポーンは大量のデータを含む長いプロセスに適していますが、実行は短いデータに適しています」と述べています。

どうしてこれなの? Node.jsのchild_processのspawn関数とexecute関数の違いは何ですか、またどの関数を使用するかはいつわかりますか?

20
Harry Cramer

主な違いは、spawnが大量の出力を伴う長時間実行プロセスに適していることです。 spawnは、子プロセスを使用して入出力をストリーミングします。小さな(デフォルトでは200K)バッファーにexecバッファーされた出力。また、execを最初に生成してサブシェルを起動してから、プロセスを実行してみてください。ストーリーを短くするには、子プロセスから大量のデータをストリーミングする必要がある場合はspawnを使用し、シェルパイプ、リダイレクトなどの機能が必要な場合、または複数のプログラムを一度に実行する必要がある場合はexecを使用します。

いくつかの便利なリンク- DZoneHacksparrow

3
Vasyl Moskalov

まず、NodeJS documentation から始めてください。

「spawn」の場合、ドキュメントの状態:

Child_process.spawn()メソッドは、argsにコマンドライン引数を指定したコマンドを使用して、新しいプロセスを生成します。省略した場合、argsはデフォルトで空の配列になります。

「exec」の間:

シェルを生成し、そのシェル内でコマンドを実行し、生成された出力をバッファリングします。 exec関数に渡されたコマンド文字列は、シェルによって直接処理され、特殊文字(シェルによって異なる)はそれに応じて処理する必要があります。

主なことは、コマンドの出力を処理する必要があるかどうかであると思われます。これは、パフォーマンスに影響を与える要因であると私は想像しています(比較していません)。出力ではなくプロセスの完了のみに関心がある場合は、「spawn」で十分であるように見えます。

3
Andre M