1. ホーム
  2. multithreading

[解決済み】「スレッド」とは(本当は)何ですか?)

2022-03-28 17:11:01

質問

を理解するために、良い定義を見つけようとしています。 スレッド は本当にそうなのか。

私は何か明白なことを見逃しているに違いないと思うのですが、スレッドが何であるかについて読むたびに、それはほとんど循環的な定義、すなわち "a thread is a thread of execution" や "a way to divide into running tasks" のようです。ええと......。え?

私が読んだ限りでは、スレッドというのは本当は 何か プロセスのような具体的な 実際には、単なる概念に過ぎません。私が理解したところでは、プロセッサがあるプログラムに対していくつかのコマンドを実行する(これは 実行スレッド を保存し、他のプログラムの処理に少し切り替える必要があるときに 状態 をどこか(Thread Local Storage)に保存してから、他のプログラムの命令を実行し始める。といった具合に、行ったり来たりする。このように、スレッドというのは、現在実行中のプログラムの実行経路の1つという概念に過ぎない。

プロセスとは異なり、それは本当に何か、つまりリソースなどの集合体なのです。

あまり役に立たなかった定義の一例として.

から ウィキペディア :

コンピュータサイエンスにおけるスレッドは、実行スレッドの略称です。スレッドは、プログラムが自身を2つ以上の同時(または擬似的な同時)実行タスクに分割する(「分割」と呼ぶ)方法である。スレッドとプロセスはオペレーティングシステムによって異なるが、一般にスレッドはプロセス内に含まれ、同じプロセス内の異なるスレッドは同じリソースを共有するが、同じマルチタスクオペレーティングシステム内の異なるプロセスはそうではない。

では、私は正しいのでしょうか?間違ってますか?スレッドとは一体何なのか?

編集してください。 どうやらスレッドには独自のコールスタックも与えられているようなので、多少は具体的に もの .

解決方法は?

スレッドは、プロセッサのレジスタに対する独立した値のセットです(シングルコアの場合)。 これには命令ポインタ(別名プログラムカウンタ)が含まれるため、何がどの順番で実行されるかを制御します。 また、スタックポインタも含まれ、これは各スレッドに固有のメモリ領域を指すようにしなければならず、さもなければ互いに干渉することになります。

スレッドは、制御フロー(関数呼び出し、ループ、goto)の影響を受けるソフトウェア単位です。なぜなら、これらの命令は命令ポインタ上で動作し、それは特定のスレッドに属しているからです。 スレッドはしばしば何らかの優先順位付けに従ってスケジュールされます(ただし、プロセッサコアあたり1スレッドのシステムを設計することも可能で、その場合はすべてのスレッドが常に実行されているので、スケジュール設定は必要ありません)。

実際には、命令ポインタの新しい値を決定するには、その場所に格納されている命令とその値で十分です。 ほとんどの命令では、これは単に命令のサイズによってIPを進めるだけですが、制御フロー命令は他の、予測可能な方法でIPを変更します。 IPが取る一連の値は、プログラムコードを織りなす実行経路を形成し、「スレッド(thread)」と呼ばれるようになった。