2016-05-16 9 views
3

CPU集中型タスクにnodejsを使用しています。これは基本的に大量のデータを生成し、ファイルに格納します。私はそれが単一のタイプのデータのために生成されるように出力ファイルにデータをストリーミングしています。Nodejsスレッドを使用した並列プログラミング

目的:私は(その最高に私のマルチコアCPUを利用して)並列に複数の種類のデータについては、このデータを生成するタスクを作りたい.Withoutプロセスのそれぞれで提供.Thus独自のヒープメモリを持ちますプロセスメモリが大きくなり、実行速度が向上します。

私はこれは私が欲しいものを達成するかどうかわからないhandling.But video on meteor fibers by Chris Matherの一つで、最終的にすべてがある最後に言及しているとして、独自のコールバックのために meteor jsでも使用されているノード fibersを使用することを計画していた

シングルスレッドおよびノー​​ドファイバーは、その機能を提供するために、何らかの形で同じ単一スレッドイベントループを管理します。だから、

、これは私がノードの繊維を使用する場合、私はこのように私のCPUコアを利用していない、 並行して、私のタスクを実行していることが文句を言わないことを

  • を意味するのでしょうか?

  • は、ノードwebworker-threadsがwebworkerスレッドは、このようにリアルタイムでマルチスレッドを提供し、 プロセス別々/パラレルCPU上で実行されます、と言っている I desire.Asはモジュールのホーム・ページに記載されて 機能を達成するために私を助けるいセンス?

  • 最後の質問として、このようなCPU集約的なタスク ではnode.jsはお勧めできませんか?

注:私は、スレッドとして提示されている非同期コードの構造化LIBSを使用したくないが、作業が大幅にCPUを集中.Iがすでに使用している非同期能力があるとしてInfactはちょうど、同じ非同期コードの上にsyntatical砂糖を追加します〜まで

// Update 1の(クラスタのための答えに基づいて)私が直面したクラスタと

私はこれを言及するのを忘れて申し訳ありませんが、問題です:

  • 複雑な量の負荷を分散します特定の並列タスクのセットが他の特定のタスクの前に実行されるようにするために、私は持っている作業を行います。クラスタが本当にthese lines on webworker-threads NPMホームページ

「イベントループをブロックすることはできません」問題はノードのイベント化モデルに固有のものであるに言及、私がやりたい場合は

  • わかりません。 Node-clusterとしていくつのNodeプロセスを実行しても、CPUバインドされたタスクの問題は解決しません。

  • .....どのような光がどのように役立つか。

    答えて

    3

    複数のスレッドを実装するのではなく、Nodeで複数のプロセスを使用する方がずっと簡単です。js

    たとえば、clusterモジュールを参照してください。これにより、複数のプロセスで同じjsコードを簡単に実行することができます。コアごとに1つ、結果を収集する/完了したら通知することができます。

    クラスタが必要以上に機能する場合は、forkに直接電話することもできます。


    あなたは、スレッド並列処理ではなく、PROCESS-を持たなければならない場合は、async nativeモジュールを書いて見てみたいことがあります。その後、libuvスレッドプールにアクセスできます(飢えているとI/Oパフォーマンスが低下する可能性があります)。自分のスレッドを自由にforkすることができます。負荷分散のために更新1


    、あなたのために働いていないんどのようなクラスターならば、私が述べたように、あなただけの、フォークでそれを自分で行うことができます。クラスタのソースが利用可能です。

    他の点としては、タスクが本当にCPUにバインドされていれば、他のすべてのテクノロジがノードを使用している場合は、ノードが他のテクノロジよりも優れているという利点はありません。あなたが持つ唯一のオプションは、ワーカープールがあなたに与えるすべての利用可能なCPUリソースを使用していることを確認することです。すでにNodeを使用している場合は、既に入手しているオプション(clusterまたはlibuv)を使用するのが最も簡単なオプションです。彼らが十分ではない場合は、ええ、あなたは他のものを見つける必要があります。

    技術に関係なく、マルチプロセスの並列処理はマルチスレッドの並列処理よりも簡単です。

    注:あなたが言うことにもかかわらず、非同期コードはCPI集約型であるため正確に使用する必要があります。そうしないと、すべてのI/Oがブロックされます。あなたはこれが起こらないようにします。

    +0

    更新された質問を見てください、残念ですが、このことを忘れてしまいました... – damitj07

    +0

    これは、他のテクノロジと比較して、ノードでのマルチスレッド並列処理を提供するライブラリが存在しないことを意味しますか? – damitj07

    +0

    人々の意見は非常に悪い考えです。 JavaScriptはそのために設計されていません。 – OrangeDog

    関連する問題