「スレッド」とは何ですか?(実際)質問する

「スレッド」とは何ですか?(実際)質問する

私はスレッドが実際に何であるかについて、適切な定義を見つけ、理解しようと努めてきました。

どうやら私は何か明らかなことを見逃しているようですが、スレッドとは何かについて読むたびに、それは「スレッドは実行のスレッドである」または「実行中のタスクに分割する方法」のような、ほとんど循環的な定義です。ええと、えっ?

私が読んだところによると、スレッドはプロセスのように具体的なものではないようです。実際、単なる概念です。私が理解している仕組みでは、プロセッサはプログラム (実行スレッドと呼ばれます) のコマンドを実行し、他のプログラムの処理に切り替える必要がある場合は、現在実行中のプログラムの状態をどこか (スレッド ローカル ストレージ) に保存し、他のプログラムの命令の実行を開始します。これを繰り返します。つまり、スレッドは実際には、現在実行中のプログラムの「実行パスの 1 つ」の概念にすぎません。

プロセスは実際には何かであるのとは異なり、リソースなどの集合体です。

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

からウィキペディア:

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

それで、私は正しいのでしょうか? 間違っているのでしょうか? スレッドとは実際何なのでしょうか?

編集:どうやらスレッドには独自のコール スタックも与えられているようですので、これはある程度具体的なものです。

ベストアンサー1

スレッドは実行コンテキストであり、CPU が命令のストリームを実行するために必要なすべての情報です。

本を読んでいて、今は休憩を取りたいけれど、中断した正確な位置から戻って読み続けられるようにしたいとします。これを実現する 1 つの方法は、ページ番号、行番号、単語番号を書き留めることです。つまり、本を読むための実行コンテキストは、この 3 つの数字になります。

ルームメイトが同じテクニックを使っている場合は、あなたが読んでいない間にその本を借りて、中断したところから読み始めることができます。その後、あなたはその本を取り戻して、中断したところから読み始めることができます。

スレッドも同様に動作します。CPU は、複数の計算を同時に実行しているという錯覚を与えます。これは、各計算に少し時間を費やすことによって実現されます。これが可能なのは、各計算に実行コンテキストがあるためです。友人と本を共有できるのと同じように、多くのタスクで CPU を共有できます。

より技術的なレベルでは、実行コンテキスト (つまりスレッド) は CPU のレジスタの値で構成されます。

最後に、スレッドはプロセスとは異なります。スレッドは実行のコンテキストですが、プロセスは計算に関連付けられたリソースの集まりです。プロセスには 1 つまたは複数のスレッドを含めることができます。

説明: プロセスに関連付けられたリソースには、メモリ ページ (プロセス内のすべてのスレッドはメモリの同じビューを持ちます)、ファイル記述子 (例: オープン ソケット)、およびセキュリティ資格情報 (例: プロセスを開始したユーザーの ID) が含まれます。

おすすめ記事