1.マルチチャネルテクノロジー
1.1。基本的な知識
同時実行性:同時実行は同時実行と呼ぶことができるように見えます
並列処理:実際の同時実行
注:並列処理は確実にカウントされます。シングルコアコンピューターは並列処理を実行できませんが、並行処理は可能です。!!
補足:単一のコアがコアであると直接仮定し、1人だけが機能し、CPUのコアの数は考慮しません
1.2、マルチチャンネル技術
複数のプログラムの実行に費やされた合計時間を節約する
1.2.1、空間多重化
複数のプログラムが1台のコンピューターを使用する
1.2.2、時分割多重
プログラムの実行中にコードを書く
1.2.3、切り替えて保存
CPUスイッチングには2つのタイプがあります。
1.プログラムがIO操作に遭遇すると、オペレーティングシステムはプログラムからCPU実行権限を奪います
役割:プログラムの実行効率に影響を与えずにCPUの使用率を向上させる
2.プログラムがCPUを長時間占有している場合、オペレーティングシステムはプログラムのCPU実行権も奪います。
短所:プログラム実行の効率が低下する
2.プロセス理論
2.1、プロセスとプログラムの違い
プログラムは実行されていないコードで記述されています
プロセスは実行中のプログラムです
2.2、プロセスのスケジューリング
2.2.1。先着順のスケジューリングアルゴリズム
実行が完了した後、最初に最初に来る次のジョブを入力します。これは、短いジョブではなく、長いジョブに適しています。
2.2.2、ショートジョブ優先アルゴリズム
最短のジョブが優先され、実行完了後、次のジョブに入る
2.2.3。タイムスライスローテーションメソッド+マルチレベルフィードバックキュー
3.プログラム実行の3つの状態
4、同期および非同期
同期:タスクが送信された後、タスクが配置されるまで待機し、待機中は何もしません
手続き的なパフォーマンスが行き詰まっている
非同期:タスクが送信された後、タスクが配置されるのを待たず、他のものを直接処理します
タスクに戻って実行する非同期コールバックメカニズムが必要
5、ブロッキングおよび非ブロッキング
ブロッキング:ブロッキング状態
非ブロッキング:準備完了状態、実行状態
最も効率的な組み合わせは、非同期のノンブロッキングです。
6、2つの方法でコードプロセスを開始する
スタートアップ項目を作成します。スタートアップ項目はメインプロセスです
1つ目は、関数の確立に従って、開始項目が関数にパラメーターを渡し、startを使用して開始する必要があることです。
2つ目は、クラスの確立に従ってクラスを開始し、startを使用して開始することです。
注:
プロセスを作成すると、メモリ内のメモリ空間の一部が適用され、実行に必要なコードがスローされます
。1つのプロセスはメモリ内の個別のメモリ空間
に対応します。複数のプロセスはメモリ内の複数の独立したメモリ空間に対応します
。プロセスとプロセス間のデータはデフォルトですこの場合、直接対話することはできません。対話したい場合は、サードパーティのツールとモジュールを使用できます。
マルチプロセッシングからインポートプロセスの インポート時間 デフタスク(名): 印刷(' %sが実行されている'%の名称) time.sleep( 3 ) print(' %s is over '%name) IF __name__ == 「__main__ 」: #1は、オブジェクト作成 P =プロセス(目標=タスク、引数=(「ジェイソン」)) #1 つのみの要素を分離するために使用コンマをお勧めしますがある場合でも、コンテナタイプ #2オープンプロセス Pを.start() #を使用すると、非同期にプロセスを作成するためのオペレーティングシステムを教えて 印刷する(「主」) #継承第二の方法クラス からマルチプロセッシングインポートプロセス インポート時間 クラスMyProcess(Process): def run(self): print(' hello bf girl ' ) time.sleep( 1 ) print(' get out!' ) if __name__ == ' __main__ ' : p = MyProcess() p.start() 印刷(' マスター')
7、結合方法
参加とは、メインプロセスがサブプロセスコードの実行を待機し、他のサブプロセスの実行に影響を与えずに実行を継続することです。
マルチプロセッシングからインポートプロセスの インポート時間 def task(name、n): print(' %s is running '%name) time.sleep(n) 印刷(' %sは'%nameを超えています) if __name__ == ' __main__ ' : #p1 = Process(target = task、args =( 'jason'、1)) #p2 = Process(target = task、args =( 'egon'、2)) #p3 = Process (target = task、args =( 'tank'、3)) #start_time = time.time() #p1.start() #p2.start() #p3.start()#プロセスを作成するようにオペレーティングシステムに指示する ##time.sleep(50000000000000000000) ##p.join()#メインプロセスは、子プロセスpが完了するのを待ってから、実行を続行します #p1.join() #p2.join() #p3.join() start_time = time.time() p_list = [] のための I における範囲(1、4 ): p = Process(target = task、args =(' 子到程%s '%i、i)) p.start() p_list.append(p) 以下のためのp でp_list: p.join() print(' 主'、time.time()-start_time)
8.プロセス間のデータ分離
各プロセスには独自の名前空間があり、互いに影響しません。
マルチプロセッシングインポートプロセスから お金 = 100 DEF タスク(): 株式会社無料で参加マネー #はローカルでグローバルを変更します お金= 666 印刷(' 子' 、お金) if __name__ == ' __main__ ' : p =プロセス(ターゲット= タスク) p.start() p.join() プリント(お金)