手続きやプロセス
プログラムを個別に実行することができない、唯一のプログラムは、システムが割り当てるリソースがそれを実行するために、メモリにロードされ、それはプロセスと呼ばれるこのプログラムの実行されます。
差が手順および処理することである:プログラムは、命令のセットであり、それが実行中のプロセスを説明する静的テキストである。プロセスは、実装活動のプログラムであり、動的な概念です。
プロセスがリソース割り当ての最小単位であり、スレッドは、CPUスケジューリングの最小単位であり、各プロセスは、少なくとも一つのスレッドを有しています。
スレッド
スレッドは、プロセスは、エンティティであり、処理動作の最小単位が実行され、通常、複数のスレッドを含むプロセスは、各スレッドがCPU使用率の基本単位です。
図1は、マルチスレッドOSにおいて、スレッドは、基本的な単位は、基本単位のスケジューリングおよびディスパッチの独立もこうして、独立して動作可能です
2、各スレッドに同じプロセスは、プロセスが所有するリソースを共有することができます
図3に示すように、複数のスレッド間の処理で同時に実行することができます
ときに処理を開始スレッドが最小単位ストリーム実行されるので、それは(事実は、setdaemonに(複数のスレッドを設定する場合、メインスレッドは、デフォルトで、Pythonで、複数の子スレッドを作成し、メインスレッドを生成する偽デフォルトう))、メインスレッドは、その任務の実装が完了した後、撤退し、この時間は、子スレッドが自分の使命の終わりまで、その任務を実行していきます、
python3は2標準ライブラリ_threadとスレッド通すためのサポートを提供しています。
_threadがローレベル、元のスレッドと単純ロックを提供し、それはスレッドモジュール関数と比較される非常に限られています。
スレッドモジュールは、すべてのメソッド_threadのモジュールが含まれている他の方法は、また、提供します:
- threading.currentThread():現在のスレッドの変数を返します。
- threading.enumerateは():実行中のスレッドのリストを返します。実行中のスレッドが開始を意味し、終了する前に、開始前と終了後に糸が含まれていません。
- threading.activeCountは():実行中のスレッドの数を返します、とlen(threading.enumerate())と同じ結果を持っています。
方法を使用することに加えて、スレッドモジュールは、Threadクラスは、次のメソッドを提供し、スレッドを処理するスレッドクラスを提供します。
- 実行():スレッドの活動の方法を示すために。
- 開始():スレッドの活動を開始。
- 参加する([時間]):中断されたスレッドまで待ちます。このブロックは、スレッドのjoin()メソッドを呼び出すまでのスレッドがサスペンションと呼ばれている - 通常の終了または未処理の例外を投げる - またはオプションのタイムアウトが発生します。
- isAlive()戻り値:スレッドがアクティブです。
- getName():スレッド名を返します。
- setName():スレッド名を設定します。
- setdaemon():また、バックグラウンドスレッドであれば、バックグラウンドスレッドまたはフォアグラウンドスレッド(デフォルト)に設定し、メインスレッドの実行プロセス、メインスレッドが終了した後、バックグラウンドスレッドを実行し、成功したかどうかは、停止しているかどうかをバックグラウンドスレッド、フォアグラウンドであればメインスレッドが終了した後、スレッド、メインスレッドの実行プロセス、フォアグラウンドスレッドをフォアグラウンドスレッドが、プログラムの停止が完了した後に行われる待って、実行されています。
#は/ usr / binに/パイソンのenv! #コーディング:UTF8 インポートスレッディング #のスレッドモジュール のインポート時 DEF sayHi(NUM): #の実行に各スレッドの関数定義 を印刷(' ONナンバーランニング' NUM) time.sleep(。3 ) IF __name__ == " __main__ " : T1 = threading.Threadの(目標= sayHi、引数(= 33である)) #は、スレッドインスタンス生成 threading.ThreadのT2 =(目標= sayHi、引数=を(22である)) #生成別のスレッドのインスタンス t1.start() #は、スレッドを開始します t2.start() 印刷(t1.getName()) #GETスレッド名の 印刷(t2.getName()) t1.join() #彼らの後に実施さt1の子スレッドの実行の背後にあるコードを待って、メインスレッドをブロック t2.join () #のブロックの前に、後仕上げ実行T2サブコードの実行のためにメインスレッド、スレッドが待機 プリント(「----- END 」)