コンピュータの基礎 - プロセスとスレッド

あなたはC ++やJavaを使用したり、運用・保守業務のためにのみ適用されているかどうか、職場に行き始めたとき、私はこの問題が発生したと確信しています。

これは非常に基本的な質問ですが、非常に人間のレベルのテストの質問です。

彼は、プロセススレッドはコンピュータの概念に基づいて、すべてのプログラマは必ず連絡してください何かで、誰もがコンピュータサイエンスを理解する必要があるための基盤があると述べました。

しかし、これは問題の無制限の拡大と深さの完全な罠です。そのような知識は、スレッドセーフな、プロセス間通信に並行プログラミング、深部からの同時プログラミングスレッドの同期にシングルスレッドなどから拡張することができ、コンピュータ組成原理にオペレーティング・システムから拡張することができます。

 

だから、どのように我々はこの質問それに答えるのですか?

どのようなプロセスとスレッドを理解するために今の違いについて話をし、あなたの最初の必要性。

、私は良いアナロジーを見つけ、記事の材料を読む前に、彼らは明確で分かりやすい説明をすることができます。

1.コンピュータは、すべてのコンピューティングタスクを想定し、コアCPUです。それは常に動作して、工場のようなものです。

2.唯一のワークショップを供給することができ、限られた発電所を想定。言い換えれば、ワークショップでは、植物は他をシャットダウンしなければならないときに始めました。背後にある意味は、単一のCPUが1つのタスクだけを実行できることです。

3.プロセスは、単一のCPUがタスクを処理することができ表し、工場の床のようなものです。いずれかの時点で、CPUは常に他のプロセスが実行されていない、プロセスを実行します。

4.ワークショップ、多くの労働者があります。彼らは、共同作業を完了する。

5.スレッドがワークショップに比べて労働者が好き。プロセスは複数のスレッドを含めることができます。

6.ワークショップ空間は、そのような部屋の多くとしての労働者によって共有され、各労働者がの内外にできることです。これは、各スレッドは、これらの共有メモリを使用することができ、プロセスのメモリ空間が共有されている象徴しています。

7.しかし、異なる各部屋の大きさ、及び一部の客室にのみ、このようなトイレとして、一人の最大収容することができます。他の人が行くことができないとき内部の誰か。これは、特定の共有メモリを使用した場合、他のスレッドがメモリのこの部分を使用するために、最後までそれを待つ必要がありますスレッドを表します。

8.入るから他人を防ぐための簡単な方法、プラスロックドアいます。最初の男はドアをロックし、その後、あなたがドアに並ぶなど、人々がロックされて見て、その後、ロックを開くために行きます。これは、同時にメモリのブロックを読み書きする複数のスレッドを防ぐために、「相互排他ロック」(相互排除、略記ミューテックス)と呼ばれます。

9.いくつかの部屋、Nは、キッチンなど、個々に対応することができます。数がnよりも大きい場合である。すなわち、余分な男は外で待機します。これは、特定のメモリ領域のようなものです、唯一のスレッドの固定数を提供することができます。

このソリューションでは10、Nキーのドアです。彼らは元の位置に戻し、キーがたむろするとき、キーを取り、中に移動します。人々は頭上の鍵を見つけた後は、ドアに並んで待っていることを知っている必要があります。このような行為が呼び出され、「複数のスレッドが互いに競合しないことを保証するために使用され、セマフォ」(セマフォ)。

簡単ミューテックスセマフォ、参照するには、(N = 1時間)の特別な場合です。言い換えれば、あなたは、前者と後者を置き換えることができます。ミューテックスは、シンプルかつ効率的であるため、しかし、それは排他的で、リソースの利用可能性、またはこの設計を使用することを保証しなければなりません。

11.オペレーティングシステムが設計され、したがって三点に要約することができます。

(1)複数のタスクを同時に実行することができ、マルチプロセスを形成する工程と

マルチスレッド、異なる部分に単一の操作タスクを可能にする形で(2)。

(3)一方、スレッド間およびプロセス間の資源の共有を可能にする、プロセス間の衝突を防止するために、一方ではスレッド間、調整メカニズムを提供します。

このアナロジーはプロセスとスレッド間の差の非常にイメージを説明することがあります。

もちろん、あなたがこの束を言うことができないインタビューは、インタビュアーはあなたが心配教えて推定され、時間は貴重である、我々は二つの概念と最も合理言語の違いを伝える必要があります。

 

あなたはこのような点を(論理的に構造化面接を明確に、簡潔な言語、ストレートキーが必要)に答えることができます。

(1)プロセス

プロセスは、プログラムを実行する処理である動的な概念であり、実装プロセスにおいてプログラム管理および資源の割り当ての基本単位であり、各プロセスは、独自のアドレス空間を有し、少なくとも5つの基本的な状態があり、それらは:初期状態実行状態、待ち状態、レディ状態、終了状態。

(2)糸

 スレッドは、すべてのリソースが所有しているプロセスに属する他のスレッドのプロセスと共有することができるCPUのスケジューリングとディスパッチの基本単位です。

(3)連絡先

 スレッドは、プロセスの一部であり、スレッドは、唯一のプロセスに属することができ、プロセスは複数のスレッドを持つことができるが、少なくとも1つのスレッドがあります。

(4)の違いは:それらの間の違いを理解して、私は資源利用の観点から始めます。(いわゆるリソースは、コンピュータの中央処理装置、メモリ、ファイル、ネットワークなどです)

基本的な違い:プロセスは、オペレーティング・システム・リソース割り当ての基本単位であり、スレッドはタスクのスケジューリングおよび実行の基本単位であります

オーバーヘッドの点で:各プロセスは、独自のコードとデータ空間(アプリケーション・コンテキスト)を有し、プログラムの切り替え大きなオーバーヘッドを有し、スレッドは軽量プロセスとして見ることができる、スレッドがコードおよびデータ空間の同じタイプを共有します各スレッドは、独自の独立した実行時スタックとプログラムカウンタ(PC)、オーバーヘッドスレッド間の小さなスイッチを有しています。

環境:同時に動作するシステムにおいて、複数のプロセス(プログラム)を実行し、同様の処理(プログラム)内の複数のスレッドが同時に存在するが(フィルムがたびに1つだけ実行スレッドを有し、CPUスケジューリングによって)行います

メモリ割り当て:システムは、異なるメモリ空間を実行している各プロセスに割り当てられると、スレッド、CPUに加えて、システムは、(そのリソースの使用リソース・スレッドのプロセスに属する)ではないであろうスレッドのためのメモリを割り当てます資源、スレッドグループを共有することができます。

包含関係:プロセス内の複数のスレッドが存在する場合にどのスレッドが手順を実行し、シングルスレッドのプロセスとして見ることができないラインではなく、完全に一緒にライン(スレッド)を複数、スレッドは、プロセスの一部であり、そう糸はまた、軽量プロセスまたはLWPとして知られています。

 

深い読み

1、なぜ、スレッドを設計する必要がありますか?

従来のプロセスモデルでは、プロセスの意味合いは、以下の2つの態様に分けることができます。

  • スケジューリング、実行の基本単位:各プロセスは、独自の動作ステータスを持ち、優先順位、レジスタなどは、OSのスケジューラの基本単位です。
  • リソースの所有権:プログラム、データ、ファイルや他のリソースを含みます。このプロセスはOSが異なるプロセス間でリソースの競合に対する保護を提供し、これらのリソースの所有権を持っています。

 

それは、2つの独立した機能であるので、それはそれからそれらを分離することができますか?これは、スレッド(スレッド)の概念を提示しました:

  • 実行およびスケジューリングの基本単位:スレッド
  • リソースの所有権:プロセス

 

実行およびスケジューリングの基本単位はスレッドですので、そう何が良いのセット?

同時及び分離:コンピュータのオペレーティングシステムの2つの重要な概念があります。
同時実行は、システムレベルでの並列スレッドを達成するためには、高いハードウェアの使用率を作ってみることです。効率を切り替えるスレッドコンテキストが、これは並行処理の効率を向上させることができ、スイッチングプロセスコンテキストよりもはるかに高くなります。

アイソ一般的なコンピュータ資源の重要な問題を解決するためにも、並行した後、これらのリソースの分離の崩壊を保護することができるように、共有されているが、回収することができ、それが他のコードには影響を与えません。だからスレッドが唯一のオペレーティングシステムのプロセスも可能ですされていませんが、このようなシステムは、多くの場合、同じよう際に、オペレーティング・システムおよびこのような状況の発展の始まり、それをクラッシュします。


:だからプロセス、スレッドと並行性が関連している、との関係を単離しました。基本的なスレッドを使用すると、割り当てCPUタイムスライスにしたいので、コードの同時実行の概念を導入し、一時停止し、同じを一時停止せずに継続して続けることができるように再開することで、プロセスは、アプリケーション・プロセスのスレッドの実行リソースと一緒に糸の束に相当し、ハング一度、およびこれらのリソースは、他のプログラムに影響を与えずに、回収することができます。

おすすめ

転載: www.cnblogs.com/chglog/p/11965816.html