2009-04-17 15 views
2

私は非常に高価な操作をしていますが、ほとんどすべて自己完結しています。それらの中には、いくつかの「グローバルな」状態やデータに頼っているものもありますが、すべて読み取り専用です。操作そのものは、私はかなり確信していますが、すべてを並行して行うことができますが、プログラムがある時点を過ぎる前にすべての操作を完了する必要があります。スレッドをうまく使用していますか?

ここでマルチスレッドの余分な作業と危険性を追加する価値はありますか?特に、メインスレッドはブロックして待たなければならないでしょうか?

他の問題は、このアプリケーションがWindowsとLinuxの両方で動作する可能性が高いことと、2つの異なるスレッドシステムを使用するコードを追加するのは簡単ではないことです。

答えて

4

ワーカースレッドが並列化の利点を持たない病理学的なケースのセットでない限り、並列処理よりも並列処理の方が速い可能性があります。したがって、それが価値があるかどうかという問題は、どれだけの時間を節約するか、それが文脈の中でどれだけ価値があるかのいずれかになります。マウスをクリックして何かをするのを待っている陽気なユーザーがいる場合は、10秒のうち5秒を保存することが有意義です。 cron仕事で同じ節約ではなく、そんなに。

役に立つと思われる場合は、というプロファイルのという簡単なテスト版を作成してください。

5

まあ、最初の質問です:実際に問題がありますか?

この合理的に安全かつ効率的に並列化できるように思えますが、実際にの問題が連続して実行されるのを待つのであれば、心配する必要はありません。

たとえば、夜間に実行されるバッチアプリケーションの場合、これはおそらく役に立たないでしょう。しかし、これがユーザー向けのアプリケーションであり、ユーザーが待ち時間に疲れている場合は、マルチスレッドを使用して問題を解決する価値があるように思えます。

+1

+1:必要がない場合は、余分な複雑さを加えないでください。スレッド化されたコードのメンテナンスは、マイナーなパフォーマンス向上の価値はありません。 –

+0

早期最適化はすべての悪の根源です - Donald Knuth – MattH

+0

ありがとうございますが、実際には少し問題です。スレッドは私を少し怖がらせるので私は意見を求めています。他の人がこのシナリオでそれらを使う価値があると思っているのだろうかと思いました。 –

2

あなたが説明しているのは、同時実行用語でBarrierであり、多くの種類のアプリケーションで非常に一般的です。

あなたのアプリケーションに適しているかどうかは、詳細がわからないと難しいです。

+0

私がすでに行っている基本的なテストでは、明確な利点と明確なスピードの向上があります。しかし、Win32とLinuxの両方でスレッドを使用する堅牢なソリューションの作成を正当化するのに十分であるかどうかは不思議です。 –

1

マルチコアプロセッサを使用している場合は、スレッドを同時に実行させ、並列処理で高速化することができます。

しかし、スレッドの主な用途は、特にユーザー入力やI/O完了などの外部イベントを待つことを含む複数の論理的なアクションチェーンをより簡単に書くことができると考えています。

関連する問題