2016-09-22 18 views
0

カスタムのreadFile JS関数を作成したいとします。しかし、私はそれが巨大なファイルを読み込むのに使われることを意図しているので、これを同期関数にしたくないので、私のプログラムがしばらく前進するのを妨げるでしょう。 私はこれを他のプログラムと並行して実行したいです。コールスタックから関数を削除して並列実行するにはどうすればいいですか?

この関数の呼び出しをsetTimeout(0)でラップすると、呼び出しスタックが空になるのを待ってから実行しますが、私はそれを望みません。並列で実行します。

可能でしょうか?

+1

'readFile'はすでにasyncですが、これには[' createReadStream'](https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options)を使いたいと思うかもしれません。あなたはそれを見ましたか? – JohnnyHK

+0

@JohnnyHK '' async!= parallelism''です。コールバックは、実行スタックが空になるのを待たなければ呼び出されません。 – mdziekon

+0

@mdziekon具体的に何を得ているのかはっきりしていませんが、 'readFile'を呼び出すことはファイルの読み込み中にブロックされません。ファイルI/Oの読み取りはメインスレッドの外部で行われます。したがって、効果的に並列です。 'readFile'コールバックはもちろん、メインスレッドで実行されます。 – JohnnyHK

答えて

0

child_processモジュールを使用すると、「親」モジュールと並行して実行される別々のプロセスを生成することによって、並列性を達成できます。これは「ノードのみ」のソリューションです。

WebWorkersを試すこともできます。この実装を使用して:webworker-threads。 WebWorkersは、ブラウザとNode.jsの両方で動作するはずです。

関連する問題