Process vs Thread


🔥 Process


👉 定義#テイギ#

  • コンピュータ上で連続的に実行されるコンピュータプログラム
  • メモリで実行するプログラムインスタンス(独立オブジェクト)
  • オペレーティングシステムがシステムリソースを割り当てるワークユニット
    動的概念は、実行するプログラム
  • を表す
    👉 割り当てられたシステムリソースの例
  • CPU時間
  • 実行に必要なアドレス空間
  • 独立メモリ領域
  • コード、データ、スタック、heap

    👉 特長

  • プロセスは、独立したメモリ領域(コード、データ、スタック、heapの構造)
  • をそれぞれ割り当てる.
  • デフォルトでは、プロセスごとに少なくとも1つのプライマリスレッド(Thread)
  • があります.
    各プロセスは独立したアドレス空間で実行され、1つのプロセスは他のプロセスの変数またはデータ構造にアクセスできません.
  • あるプロセスは、プロセス間通信(IPC、プロセス間通信)を使用して別のプロセスのリソースにアクセスする
    EX)pipe、socketなどの通信方法を使用
  • 🔥 Thread


    👉🏻 定義#テイギ#

  • CPUの最低動作部
  • フローで実行するフローユニット
  • プロセスの特定の実行パス
  • プロセスは、割り当てられたリソースの実行単位
  • を使用する.

    👉🏻 特長

  • Threadは、プロセス内で1つのStackを個別に割り当て、
  • のコード、データ、およびHeap領域を共有する
  • プロセスにおけるアドレス空間またはリソース(ヒップ空間など)内で、スレッド間で
  • が共有され、実行する.
    同じプロセス内の複数のThreadは同じHeap空間を共有する.プロセスは、他のプロセスのメモリに直接アクセスできません.
    各Threadには独立した登録とスタックがありますが、Heapメモリは互いに読み取りと書き込みができます.
    1つのThreadがプロセスリソースを変更すると、変更結果がすぐに他の隣接するThreadと共有されます.

    👉🏻 Java Thread

  • Javaにはプロセスは存在せず、Threadのみである.Java ThreadはJVMによってスケジューリングされた実行ユニットコードブロックである
  • Javaでは、ThreadスケジューリングはJVMによって完全に完了します.
    Threadに関する多くの情報は、JVMによって管理され、例えば
  • Threadは何個の
  • があります
  • Threadを実行するプログラムコードのメモリ位置は
  • である.
  • Threadの状態は何ですか?
  • Thread優先度は?
    開発者はJava Threadとして使用するThreadコードを作成し、JVMにThreadコードの動的実行を要求します.
  • 🔥 Multi Process vs Multi Thread


    🐶 Multi Process


    👉🏻 定義#テイギ#
  • アプリケーションは複数のプロセスからなり、各プロセスは1つのタスク
  • を処理する.
    👉🏻 長所
  • 複数のサブプロセスのうちの1つに問題が発生する場合、サブプロセスのみの死亡よりも大きな影響を及ぼす拡散
  • は生じない.
    👉🏻 短所
    ここはよくわかりません.
    注意:https://nesoy.github.io/articles/2018-11/Context-Switching
    - Context Switching에서의 오버헤드
      - Context Switching 과정에서 캐쉬 메모리 초기화 등 무거운 작업이 진행되고 많은
      시간이 소모되는 등의 오버헤드가 발생
      - Process는 각각의 독립된 메모리 영역을 할당받았기 때문에 Process 사이에서 
      공유하는 메모리가 없어, Context Switching가 발생하면 캐쉬에 있는 모든 데이터를
      모두 리셋하고 다시 캐쉬 정보를 불러와야 함
    単一スレッド:
    コンテキスト切替:タスク1コンテキスト切替-タスク2コンテキスト切替-タスク1コンテキスト切替-タスク3...
    コンテキスト切り替えの期間:(理由)
    マルチスレッド:
    コンテキスト切替:タスク1コンテキスト切替-タスク2コンテキスト切替-タスク1コンテキスト切替-タスク3...
    コンテキストの切り替え時間が短い—コア上のコード、データ、heapを共有し、挿入する必要がない
  • プロセス間の複雑な通信技術(IPC)
  • プロセスは、それぞれ独立したメモリ領域を割り当てるため、1つのプログラムに属するプロセス間で変数
  • を共有することはできない.

    🐶 Multi Thread


    👉🏻 定義#テイギ#
  • アプリケーションは複数のThreadからなり、各Threadは1つのタスク
  • を処理する.
    多くのオペレーティングシステム(
  • ウィンドウとLinuxを含む)はマルチプロセスをサポートしているが、基本的にはマルチスレッド
  • である.
  • Webサーバは典型的なマルチスレッドアプリケーション
  • である.
    👉🏻 長所
  • システムのリソース消費を削減(リソース効率の向上)
  • プロセスを作成し、リソースを割り当てるシステム呼び出しを低減し、リソース
  • を効率的に管理する.
  • システムのスループットがより高い(処理コストがより低い)
  • Thread間で簡単なデータ共有を実現し、システム資源の消費を減らす.
  • Thread間のワークロードは小さく、Context
  • を素早く切り替えることができます.
  • 簡単な通信方式でプログラム応答時間を短縮
  • Thread共有プロセスでは、ワークスペース以外のすべてのメモリが共有されるため、通信が容易になります.
  • 👉🏻 短所
  • 週間の深い設計が必要
  • デバッグ困難
  • 単Threadシステムの効果👇
  • 他のプロセスはThreadを制御できない(プロセス外ではThreadを制御しない)
  • マルチスレッドリソース共有の問題(同期の問題)
  • 一つのThreadに問題が発生すると、プロセス全体に影響を与える
  • 🔥 マルチプロセスではなくマルチスレッドを使用する理由🔥


    👉🏻 複数のプログラムを使用するのではなく、1つのプログラムで複数のタスクを解決します.
    👉🏻 生産性の向上
  • プロセスを作成し、リソースを割り当てるシステム呼び出しを低減し、リソースの効率的な管理を実現
  • プロセス間のテキスト切り替えは、CPUレジスタを交換するだけでなく、RAMとCPU間のキャッシュされたデータを初期化するため、オーバーヘッドが大きい.
  • Thread共有プロセスのメモリは、独立したプロセスとは異なり、Thread間のデータ共有がより簡単で、システムリソースの消費量がより低い
    👉🏻 処理コストの削減と応答時間の短縮
  • プロセス間通信(IPC)よりも、Thread間通信のコストが低い👉🏻 タスク間の通信コストの削減
  • ThreadはStack領域以外のすべてのメモリを共有する
  • ThreadからThreadへの変換速度は
  • プロセス間の変換速度より速い
  • Contextを変換するときThreadは、
  • のためスタック領域のみを処理する.
    🔥 に注意
    👉🏻 どうきもんだい
    Thread間のリソース共有ではグローバル変数(データセグメント)が使用され、一緒に使用すると競合する可能性があります
    出典:https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html HeeJeong Kwon