2009-07-02 11 views
8

単一CPU上で "並列コーディング"と "マルチスレッドコーディング"を同じ意味で使用できますか?並列コードVsマルチスレッド(シングルCPU上)

私は の両方の経験はあまりありませんが、私は自分のコーディングスタイルを上記のいずれかにシフトしたいと思います。

私は現在、多くのシングルスレーブアプリケーションが廃止されているため、今後のソフトウェア業界にとってキャリアの見通しとしては良いでしょうか?

答えて

0

"パラレルコーディング"とはどういうことか分かりませんが、パラレルコーディングとは、CPUによって並列に実行されるコードを生成することを意味すると理解しているため、マルチスレッドコードはその記述の中に入ります。

このようにして、明らかに、それらを交換可能に使用することができます(一方が他方の内側にある場合)。

それでも、私はそれをゆっくりとし、基本から学ぶことをお勧めします。マルチスレッドが重要になっている理由、プロセス、スレッド、ファイバーの違いは何か、どのようにそれらを同期させるのかなどについて理解する。

パラレルコーディングは、それを呼び出すときに非常に複雑であり、特にシーケンシャルコーディングと比べて非常に複雑であるため、準備する必要があります。また、それに急ぐだけではありません。 1つのスレッドではなく3つのスレッドを使用するだけで、プログラムが高速化されるわけではなく、速度を遅くすることさえできます。あなたは、ほんとうのことを理解する必要があります。すべてのことを平行にすることはできません。

2

この質問は、複数のスレッドで並列操作を実行できますが、すべてのマルチスレッドアプリケーションが並列計算を使用していないため、少し混乱します。 並列コードでは、通常、結果を非同期で返すために一連のデータを消費する多くの「ワーカー」があります。しかし、マルチスレッドはGUIのようなより広い範囲で使用され、I/Oとネットワーキングをブロックします。

OSがスレッドとプロセスをどのように処理できるかによって、管理が大きく変わることはありません。

マルチスレッドはどこでも役に立ちますが、並列は日常的なコンピューティングのパラダイムではないため、キャリアの見通しでは「ニッチ」かもしれません。

2

.NET 4.0で私が見たデモの中には、パラレルコードの変更がスレッドを実行しやすくなっているようです。並列処理をサポートするための "For Loops"などの新しい構文があります。だから違いがある。

私は将来両方で行うと思っていますが、私はパラレルサポートがより簡単で簡単になると思います。バックグラウンド操作などのためにスレッドが必要です。

+0

HTTPで書かれたコンパイラや私の構築物により行われ、明示的な作業です://channel9.msdn。 com/posts/VisualStudio/Parallel-Extension-to-the-NET-Frameworkの使用/ – eschneider

1

実際、1つのCPU上で「本当の」並列性を達成することはできません。この領域に少し役立ついくつかのライブラリ(CのMPIなど)があります。しかし、パラレル化のコンセプトは、の人気のあるソリューションを開発している開発者の間で使用されるものではありません。

マルチスレッドは、最近、単一のCPUに複数のコアが導入されたことで一般的です。スレッドライブラリやスレッドセーフなタイプ、メソッド、クラスなどにより、あらゆる言語で実装するのは簡単でほとんど透過的です。これにより、パラレル化をシミュレートすることができます。

これで始める場合は、まず並行性とスレッドのトピックについて読んでください。もちろん、スレッド+並列処理はうまく機能します。

+0

マルチスレッドは、おそらくerlang以外のどの言語でも容易ではありません。 –

+0

私はerlangとparalellismについて多くのことを聞いたことがあります。残念ながら私はこの言語を知らない。 簡単なマルチスレッド化とは、複数のスレッドを作成し、それらを一貫して動作させることです。私はそれが自明ではないことを知っていますが、スレッド化する代わりに、あなたの問題に対する別の解決策を検討することは難しいことではありません。 –

+0

@Jorge - 私はerlangがスレッドを使うとは思っていませんが、メモリを共有しない軽量のプロセス – bubaker

12

マルチスレッド化と並列コーディング/コンピューティングの間には、ターゲット処理アーキテクチャの主な違いがあります。

マルチスレッドは、共有メモリを持つ単一のCPU上の単一プロセス内同時実行の利点を活用するために使用されています。複数のCPUを搭載したマシンで同じプログラムを実行すると、大幅な高速化を招くことがありますが、(最近まで)意図したものではなく、しばしばボーナスになります。多くのOSは、複数のCPUを必要とするが、複数のCPUを必要としないスレッドモデル(例えば、pthreads)を有する。マルチプロセッシング

は背中に多くのCPU /コアになりました、その後、多くのマシン間でクラスタ・コンピューティングに、大きなマシン上で多くのCPUを搭載した初期のSMPマシンから、複数のCPUをターゲットとし、並列プログラミングのための標準的なモデルであり、単一のコンピュータ。 MPIは、さまざまなアーキテクチャで動作する標準です。

もちろん、OpenMPのような言語フレームワークを持つスレッドを使用して並列設計をプログラムすることができます。理論的にどこでも動くことができる別々の処理に依存するマルチコンポーネントのGUI /アプリケーションについて聞いたことがあります。実際には、前者の方が後者よりも多くあります。

おそらく、主な違いは、プログラムが複数のマシンで実行されている場合です。マルチスレッドを使用することは現実的ではなく、メモリを共有する既存のアプリケーションは機能しません。簡単な言語で

0

マルチスレッドは、それ自体で、CPUで利用可能で、 並列プログラミングは、いずれかのプログラマ「の#pragma」

関連する問題