顔の質問は:プロセスとスレッドの違いについて教えてください

https://www.cnblogs.com/zhehan54/p/6130030.html

 

同じ時間内にサーバーが1つのクライアントだけを果たすことができれば、同時実行のための特定の感覚を持っているために、プロセスと選択肢のスレッド概念を理解する前に、その後、他のクライアントShadeng言葉がありますが、それはパフォーマンスの低下が顧客に叱られると予想されることを示します翔が出てくるので、並行プログラミングに入ってきた、ネットワークプログラミングの同時実行の問題を考慮しなければなりません。例えば、マルチプロセス、マルチスレッド、IO多重化:並行性を実現する方法はいくつかあります。

マルチプロセス

プロセスは、リソースの割り当て(CPU、メモリ、等)の基本単位であり、それはプログラムを実行したときの例です。システムは、プロセスを実行するプログラムを作成し、そこにリソースを割り当て、その後、プロセスレディキューにプロセスを置く、それはCPU時間を割り当てたときにプロセススケジューラは、それを選択しますので、プログラムが実際に実行し始めました。

Linuxシステムの機能は、fork()子プロセスを処理するために聞かせて、新たなクライアントからの要求に応じてコピーを受け取ることができるプロセスでは、子プロセスの親プロセスを作成し、そうするには、要求の到着を監視するための唯一の責任を親プロセス、それは我々が同時処理を実現することができるように対処するために、子プロセスを作成してみましょう。

# -*- coding:utf-8 -*-
import os

print('当前进程:%s 启动中 ....' % os.getpid()) pid = os.fork() if pid == 0:    print('子进程:%s,父进程是:%s' % (os.getpid(), os.getppid())) else:    print('进程:%s 创建了子进程:%s' % (os.getpid(),pid ))

出力:

当前进程:27223 启动中 ....
进程:27223 创建了子进程:27224
子进程:27224,父进程是:27223

fork関数は、親と子でフォークを返し、コードの後ろに実行し続け、子供がPIDの値を返すデータは、オペレーティング・システムが再び現在のプロセスをコピーしますので、二つの結果を返し、その後、プログラムは二つのプロセスに分かれています0は常に親プロセスに返され、子プロセスIDのプロセスです。

マルチスレッド

スレッドは、プログラム実行の最小単位であるとき、それは実行のプロセスフローで、CPUのスケジューリングとディスパッチの基本単位である、プロセスは多くのスレッド、スレッドのプロセス間で共有リソースのすべてで構成することができ、各スレッドは独自のスタックを持っていますローカル変数。マルチCPU環境では、独立したCPUで実行されるスレッドのスケジューリングは、複数のスレッドが同時に実行することができます。マルチスレッドは、各要求を処理するためのスレッドが割り当てられ、同様に同時操作を実現することができます。

スレッドとプロセスは、それぞれの長所と短所とどのような違い、それを持っていますか?

  • プロセスがリソース割り当ての最小単位であり、スレッドは、プログラム実行の最小単位です。

  • プロセスは、独自の別個のアドレス空間を有し、それぞれはプロセスを開始し、システムはそれのためのアドレス空間を割り当てる、コードセグメント、スタックとデータセグメントを維持するためにデータテーブルを設定し、この操作は非常に高価です。スレッドが同じアドレス空間を使用して、共有のプロセスデータであるため、スレッドのオーバーヘッドを作成するプロセスよりもはるかに小さいながらプロセスよりもCPUの変更は、はるかに小さい糸をとります。

  • より便利なスレッド間通信、同じプロセスを共有グローバル変数、静的変数やその他のデータ内のスレッド、及び方法(IPC)通信で行われるプロセス間の通信。しかし、どのように同期と相互排他を処理するためには、マルチスレッド・プログラムを書くことの難しさです。

  • プログラムより堅牢なマルチプロセス、マルチスレッドプログラムは限りスレッドがあるとして死ぬしかし、全体のプロセスは、あまりにも、死んでいる、そしてプロセスは、プロセスが独自の個別のアドレス空間を持っているので、他のは、プロセスに影響を与えることはありません死にます。

外国人の言葉はそう言った - 「UNIXネットワークプログラミング」:

  • フォークは高価です。メモリはすべての記述子が子に複製、というようにしている、親から子へコピーされます。現在の実装では、子供が独自のコピーが必要になるまで子供に親のデータ空間のコピーを回避コピーオンライトと呼ばれる技術を使用しています。しかし、関係なく、この最適化の、フォークは高価です。

  • IPCはフォーク後、親と子の間で情報を渡すために必要とされます。子供は親のデータ空間のコピーとし、親の記述子のすべてのコピーを開始しますので、フォークの前に親から子へ情報を渡すことは、簡単です。しかし、親に子供からの情報を返すことは、より手間がかかります。

  • スレッドは両方の問題を助けます。スレッドはプロセスよりも「軽量」であるため、スレッドは時々軽量プロセスと呼ばれています。これは、スレッドの作成は、プロセスの作成よりも10〜100倍速くすることができています。

  • プロセス内のすべてのスレッドが同じグローバルメモリを共有しています。これは、スレッド間の情報の共有が容易になりますが、このシンプルさと一緒に問題が来ます

おすすめ

転載: www.cnblogs.com/yunleijava/p/11545513.html