プロセス(過程)とは何ですか?
プログラムの実行可能なインスタンスは、プロセスと呼ばれています。(プロセスは、リソースの集合です)
各プロセスは、プロセスが仮想メモリアドレス空間、実行可能コード、ジョイントセキュリティコンテキストのオペレーティングシステムを呼び出す(許可)を有し、この手順を実行するために必要なリソースを提供
(時間の工程、少なくとも一つのスレッドが場合)、処理は通常最初のスレッドのみの処理識別子PID、優先度クラス、最小および最大ワーキングメモリ空間は、実装のプロセスは、少なくとも一つのスレッドを必要とします(スレッドは、サブサブスレッド、両方の配達なし所属を作成することができ、子スレッド)それはメインスレッドと呼ばれますが、メインスレッドは、追加のスレッドを作成することができます。
プロセスとスレッドの違いは?
スレッドはプロセスよりも速く起動するが、二つの実行速度を比較することはできません。
1.スレッド間のメモリ空間はメモリ空間を共有し、プロセスが独立しています。
2. 2つのスレッドが直接共有メモリ空間のプロセス内のデータにアクセスすることができます。複数のサブプロセス間のデータは、共有しない同じデータのために、彼らは互いに完全に独立し、親プロセスを、コピーします。
これは、スレッド3(共有データ、情報の送信、等に関連する)プロセス、複数の間で直接対話することができます。両方のプロセスは、中間プロキシを介して達成されなければならない、通信したいです。
4.新しいスレッドを作成するのは非常に簡単です、新しいプロセスを作成すると、その親プロセスのクローンである必要があります。
5.スレッドが制御し、同一プロセス内の他のスレッドの動作が、プロセスは、その子を操作することができます。
(彼らはデータを共有しているため)親プロセスの場合は、メインスレッドの変更は、他のスレッドの動作に影響を与える可能性がある6. 変更が(しかし、親プロセスは、他のサブプロセスのデータには影響しません削除された子供が影響を受けることになります)
これは、メインスレッドと子スレッドが平行で計算時間、時間がないのシリアル(順番)の関係を開始します。
よりよく理解するために:
1.概要同時実行
1 インポートスレッディング 2 インポート時間 3。 4。 DEF RUN(N): 5 プリント(" タスク" 、N-) 。6 time.sleep(2 ) 。7 。8 #二つのプログラムのスレッドの同時実行が、2秒の合計を待つ 9。 T1 =スレッドを。スレッド(目標= RUN、引数=(" T1 " )) 10 threading.Thread =のT2(目標= RUN、引数の=(" T2 " )) 。11 t1.start() 12は t2.start() 13は、 14 #コントラスト 15 #4秒の両方のシリアル実行 16 #RUN( 'T1') 。17 #RUN( 'T2')
2.#は、同時実行のクラスを呼び出しの形を継承しました
1つの #継承呼び出し、同時実行のクラスとして 2 インポートスレッディング 3。 インポート時間 4。 5つの。 クラス(threading.Threadの)MyThread: 6 DEF __init__ (セルフ、N-、SLEEP_TIME) 。7 。スーパー(MyThread、自己)__init__ () 。8 = self.n N- 9 self.sleep_time = SLEEP_TIME 10 11。 DEF RUN(自己): 12が 印刷(" タスクの実行" 、self.n)が 13である time.sleep(self.sleep_time) 14 プリント(' タスクDONE ' 、self.n) 15 16 T1 = MyThread(' T1 '、2 ) 。17、T2 = MyThread(' T2 '、4)#1 T1とスリープ時間t2が矛盾している、メインスレッドは、計算時間、両方の必要参加 18である 。19 t1.start()は 20である t2.start() 21は 22である t1.join() 23は t2.join() 24 25 プリント(' メインスレッドを持っています... ')
同時マルチサイクル3.for
そのメインスレッドと子スレッドを並列に活性化され、両方の注文が完了していません。
何が参加すると、メインスレッドがダウンして実行する前に完了するために子スレッドを待ちません。
1 インポートスレッディング 2 インポート時間 3。 4。 DEF RUN(N): 5 プリント(" タスク" 、N-) 。6 time.sleep(2 ) 。7 プリント(' タスクDONE ' 、N-) 。8 プリント(" ------ ..スレッド終了した」、threading.current_thread()) #のスレッドが現在実行タイプ 9 10 11 START_TIME = time.time()は 12である 。#同時マルチループの 13である t_objs = []#のデポジットスレッドインスタンス 14 のための I における範囲(50 ): 15 16 T = threading.Threadの(目標= RUN、引数=(" T-%S "%のI)) 17。 18である t.setDaemon(TRUE) #現在のスレッドデーモンにスレッド 19 20 t.start() 21 22 t_objs.append(t)は#を内部のリストを置くために、ここに参加していない、スレッドを開始するの後ろに遮断しないようにするために、 23 # 24 #t_objsにトン用:#サイクルスレッド・インスタンス・リスト、すべてのスレッドが終了を待つ 25 #1 (t.joinを) 26 27 印刷("完成した...すべてのスレッドが------持っている」、threading.current_thread()、threading.active_count()) #現在のスレッドタイプとアクティブ数表示 28 印刷(' 費用:'、time.timeを() - START_TIME) 29 30 #比較 31である 。#RUN( 'T1') 32 #のRUN( 'T2')
デーモンスレッド:
すべてのサブスレッドプログラミングデーモンスレッド:メインスレッドがある限り、メインスレッドが終了すると、あなたが終了することができ、完了後にすべてのルーチンは終了を待ちません。
エンド非デーモンスレッドが終了した後、プログラムがデーモンスレッドを気にしないだろうまで、メインスレッドが終了の終了を待たずメインプログラムは、それが待機します。
デーモンスレッドシナリオ:ソケットサーバーの設定
マルチコア:複数のスレッドが同時に実行することができます。
しかし、Pythonで、同時に1つのだけのスレッドを実行することができます。Pythonインタプリタは、直接呼び出し元のスレッドのC言語、転送の唯一のコンテキストにインターフェイス。処理スレッド実行、最初のスレッドを実行するように制御することができないのpython
。したがって、インタプリタは、同時に、作業の一つだけスレッドの出口を制御するだけでなく、唯一のスレッドがデータを取得することを可能にします。(追加グローバルインタプリタロック)(CPythonの)