1.簡単な説明:シングルコアは同時実行性を実現します。
第二に、並行性と並列性
1.並行性:並行して実行することは並行性と呼ぶことができるように見えます。
2. Parallel:本当の意味で同時に実行します。
3.まとめ:並列処理は同時実行シングルコアコンピューターは並列処理を実行できてはなりませんが、同時実行は可能です。
第三に、メカニズム:コンピューターのハードウェアの各部分が同時プログラムで動作するように切り替わり、切り替え時に現在の状態を保存します。
4番目に、役割:複数のプログラムの実行に費やされる合計時間を節約できます。
5、再利用
1.空間的再利用:複数のプログラムが一連のコンピューターハードウェアを共有します。
2.時間内の再利用:複数のプログラムの合計時間は、最長のプログラムと同じです。
6. CPU切り替えの2つのメカニズム
1.プログラムがIO操作に遭遇すると、オペレーティングシステムはプログラムからCPUの実行権限を奪います。これにより、CPU使用率が向上し、プログラムの実行効率に影響しません。
2.プログラムがCPUを長時間占有している場合、オペレーティングシステムもプログラムのCPU実行権限を奪いますが、これによりプログラムの実行効率が低下します。
7、手順とプロセス
1.プログラム:ハードディスクに保存されているコードは「無効」です。
2.プロセス:プログラムによって実行されているプロセスが「ライブ」であることを示します。
8.プロセススケジューリングメカニズム
1.先着順のスケジューリングアルゴリズム:長期的な運用には適していますが、短期的な運用には適していません。
2.短時間ジョブ優先スケジューリングアルゴリズム:短時間ジョブには適していますが、長時間ジョブには適していません。
3.タイムスライスローテーション方式+マルチレベルフィードバックキュー:プログラムの開始後、固定量のタイムスライスが最初に割り当てられます。これらのタイムスライスの後でプログラムが完了しない場合、プログラムは実行優先度の低いキューに順番にドロップされます同様に、新しいプログラムを開始する必要がある場合、CPUは現在のプログラムの実行を直ちに停止し、新しいプログラムの開始位置にジャンプします。
9、プログラム操作の3つの状態:準備状態===>実行状態===>ブロッキング状態===>準備状態===>実行状態。
10、同期および非同期
1.同期:タスクが送信された後、最初に他のアクションは実行されませんが、タスクの結果が返されるのを待っていると、プログラムレベルからスタックしたように見えます。
2.非同期:タスクが送信されるとすぐに他のアクションが実行され、タスクが完了すると、タスクの結果が再呼び出しメカニズムによって自動的に返されます。
11.ブロッキングとノンブロッキング
1.ブロッキング:ブロッキング状態。
2.非ブロッキング:作動可能状態、実行状態。
3.理想的な状態:コードを準備完了状態と実行状態の間で永久に切り替えます。
12の非同期非ブロッキング:最も効率的な組み合わせです。
13.プロセスを開始します。プロセスの作成は、コードを実行するためにメモリ内の別のスペースに適用することです。複数のプロセスは、複数の独立したメモリスペースに対応します。デフォルトでは、プロセス間の直接対話はできません。対話が必要な場合は、サードパーティのツール、モジュールなどの助けを借りて
#最初のメソッドオープンなプロセスを: #は、再帰が作成避け、あなたがメインプログラム実行中を作成する必要があるので、窓の下のモジュールのインポートと同様のプロセスを作成する #をLinuxでするの直接のコピーで インポートマルチプロセッシング インポート時間 def test(tag、n): print(' {} started ... ' .format(tag)) time.sleep(n) print(' {} Ended ... ' .format(tag)) if __name__ == ' __main__ ' : star_time = time.time() p1 = multiprocessing.Process(target = test、args =(' aaa '、1 )) p2 = multiprocessing.Process(target = test、args =(' bbb '、2 )) P3 = multiprocessing.Process(目標=テスト、引数=(' CCC '、3)) #は3つのプロセスは、オブジェクトを作成 (p1.start)を p2.start() p3.start() #オープン三つのプロセス p1.join() p2.join() p3.join() #のステートメントが実行さ三つの主要なプロセスは同期する必要が END_TIME = time.time() 印刷(「:{}共通の三つのプロセス」 - .format(END_TIME star_time)) プリント(「メインプログラムの終了を」) '' ' 結果は次のとおりです。 ああ始めました... bbbが開始しました... cccが開始されました... ああ終わった... bbbは終わりました... cccは終わりました... 3つのプロセスが共有する場合:3.089561939239502 メインプログラムの終了 '' '
#第二の方法オープンなプロセス:継承クラス のインポートマルチプロセッシング のインポート時間を クラスMyProcess(multiprocessing.Process): デフ __init__ (自己、タグ、N): 素晴らしい()。__init__ () self.tag = tag self.n = n def run(self): print(' {} started ... ' .format(self.tag)) time.sleep(self.n) print(' {} Ended ... ' .format(self.tag)) if __name__ == ' __main__ ' : p = MyProcess(' aaa '、1 ) p.start() 印刷(「メインプログラムを実行する」) #声明に参加する追加しないで、メインプログラムは、子供を待つが、すぐに自分のコードを実装しています 『』 ' 結果は次のとおりです。 メインプログラムが最初に実行されます ああ始めました... ああ終わった... '' '
#プロセス間のデータの分離 のインポートマルチプロセッシング インポート時間 main_tag = 1000 def test(input_tag): グローバルmain_tag main_tag = input_tagの #子のグローバル宣言は、グローバル変数は、メインプログラムに影響することはありませんまだ子供自身のグローバルメモリ空間である time.sleepを(1 ) 印刷(「子プロセス:{} 」.format(main_tag)) if __name__ == ' __main__ ' : p = multiprocessing.Process(target = test、args =(3333 、)) p.start() print(' メインプログラム:{} ' .format(main_tag)) '' ' 結果は次のとおりです。 メインプログラム:1000 子プロセス:3333 '' '
14.オペレーティングシステム開発の開発履歴:Jigeポータル:https ://www.cnblogs.com/Dominic-Ji/articles/10929381.html