マルチスレッドと並列処理は 2 つのまったく異なるトピックであり、それぞれ独自の会話に値しますが、紹介のために...
スレッド化:
実行可能ファイルを起動すると、プロセス内のスレッドで実行されます。別のスレッドを起動すると、それをスレッド 2 と呼びます。同じプロセス内で 2 つの実行チェーン (スレッド) が別々に実行されます。シングル コア マイクロプロセッサ (uP)では、複数のスレッドを実行できますが、並行して実行することはできません。概念的には、スレッドは同時に実行されるとよく言われますが、、実際には、オペレーティング システムによって割り当てられ、制御されるタイム スライスで連続して実行されます。これらのスライスは互いにインターリーブされます。そのため、スレッド 1 の実行ステップは、実際にはスレッド 2 の実行ステップと同時には発生しません。これらの動作は、通常、作成した数のスレッドに拡張されます。つまり、実行チェーンのパケットはすべて同じプロセス内で動作し、時間を共有します。オペレーティングシステムによって提供されるスライス。
したがって、システムコールの例では、他のスレッドの実行ステップを続行できるようにする前に終了するかどうかは、システムコールが何であるかによって異なります。何が起こるかについては、いくつかの要因が関係しています: ブロッキング コールですか? 1 つのスレッドが他のスレッドよりも優先度が高いか。タイム スライスの期間は?
C のスレッド化に関連するリンク:
SO Example
POSIX
ANSI C
並列処理:
マルチスレッド プログラムの実行が複数のコア システム (複数の uP、または複数のマルチコア uP) で発生する場合、スレッドは同時に実行することも、ワークロードを共有するために異なるスレッドが別々のコアに分割される可能性があるため、並列で実行することもできます。これは並列処理の一例です。
繰り返しになりますが、概念的には、並列処理とスレッド化は、物事を同時に実行できるという点で似ていると考えられています。しかし、それは概念のみであり、対象となるアプリケーションと技術の両方において、実際には非常に異なっています。スレッド化は、プロセス内のタスク全体を識別して分割する方法として役立ちます (たとえば、TCP/IP サーバーは、新しい接続が要求されたときにワーカー スレッドを起動し、接続して、その接続が残っている限り維持します)。 )、並列処理は通常、同じタスクの小さなコンポーネントを送信するために使用されます(例: 別々の場所で独立して実行できる複雑な計算セット) 別々のリソース (コア、または uP) にオフにして、同時に完了します。これは、複数のコアプロセッサが実際に違いを生む場所です. しかし、並列処理は、遺伝学やMMORPGゲームなどの分野で人気のある複数のシステムも利用します。
C での並列処理に関連するリンク:
OpenMP
その他の OpenMP (例)
Gribble Labs - Introduction to OpenMP
CUDA Tookit from NVIDIA
スレッドとアーキテクチャの一般的なトピックに関する追加の読み物:
このスレッディングとアーキテクチャの概要は、ほんの表面をなぞっただけです。トピックには多くの部分があります。それらに対処するための本は小さな図書館を埋め尽くすだろうし、何千ものリンクがある。当然のことながら、より広いトピックの中で、いくつかの概念は理屈に従わないようです。たとえば、単にコア数を増やすだけでマルチスレッド プログラムが高速になるとは限りません。