必要な知識
-
コンピューターは、コンピューター、つまり電気を備えた脳とも呼ばれます。コンピューターは、電源を入れたときに人間のように動作できるように考案されたものであり、24時間中断されないため、人間よりも効率的です。
-
コンピュータの5つの主要コンポーネント
コントローラー
オペレーター
記憶
入力デバイス
出力デバイス
コンピューターのコアは本当に機能しますCPU(コントローラー+演算ユニット=中央処理装置)
-
コンピュータでプログラムを実行するには、そのコードをハードディスクからメモリに読み取り、CPUが実行前に命令をフェッチする必要があります。
オペレーティングシステムの履歴
ブログを参照してください:https : //www.cnblogs.com/Dominic-Ji/articles/10929381.html
- パンチカード
- オンラインバッチ処理システム
- オフラインバッチ処理システム
マルチチャンネル技術
シングルコアが同時効果を実現
必要な知識
-
並行性
同時実行は同時実行と呼ぶことができるようです
-
平行
リアル同時実行
PS:
- 並列は並行と見なす必要があります
- シングルコアコンピュータは並列処理を実現できませんが、同時実行性は実現できます。!!
補足:単一のコアがコアであると直接仮定し、1人だけが機能し、CPUのコアの数は考慮しません
マルチチャンネルのテクニカルイラスト
複数のプログラムの実行に費やされた合計時間を節約する
マルチチャネル技術の主要な知識
空間を取り込み、時間を取り込む
-
空間多重化
複数のプログラムが一連のコンピューターハードウェアを共有する
-
時間の多重化
例:洗濯物を30秒間、調理を50秒間、熱湯を30秒間
単一チャネルには110秒必要、複数チャネルには時間を節約するためにタスクの長い切り替えのみが必要
例:食べて状態を保存しながらゲームをプレイする
スイッチ+状態を保存
"" " スイッチング(CPU)は2つのケースに分けられ ます。1.プログラムがIO操作に遭遇すると、オペレーティングシステムはプログラムにCPU実行権限の 役割を奪います。CPU使用率を改善し、プログラムの実行効率に影響を与えません。 2.場合、動作はCPUがプログラムの実行権限を引き付ける奪うだろう長時間CPU集約プログラム 欠点:プログラムの実装の効率(時間切替元の時間+)を還元します "「」
プロセス理論
プログラムとプロセスの違い
プログラムは、ハードディスク上にあるコードの集まりであり、「デッド」 プロセスはプログラムが実行中であり、「ライブ」であることを示します。
プロセスのスケジューリング
-
先着順のスケジューリングアルゴリズム
「」「長時間の作業には適していますが、短時間の作業には適していません」「」
- 短いジョブ優先順位スケジューリングアルゴリズム
"" "短時間の作業には適していますが、長時間の作業には適していません" ""
- タイムスライスローテーション方式:新しいプログラムを開く場合、現在実行中のプログラムを停止して、新しいプログラムを開きます。
プロセス実行の3つの状態図
すべてのプログラムは、実行する前に準備状態にする必要があります
イベント要求には、入力、印刷、オープンが含まれます
ブロッキング状態からレディ状態へ:入力が値を取得し、ファイルの読み取りが完了し、timesleepが終了します
重要な概念の2つのペア
同期および非同期
タスクの送信方法を説明します
-
同期:タスクは送信された後、その場でのタスクの戻り結果を待ち、待機中は何もしません。
-
非同期:タスクが送信された後、タスクの返される結果を待機せず、直接他のことを実行して、タスクの返される結果を待機します。
タスクの戻り結果には非同期コールバックメカニズムがあります
ブロッキングとノンブロッキング
プログラムの実行状態を説明します
- ブロッキング:ブロッキング状態
- 非ブロッキング:準備完了状態、実行状態
最も効率的な組み合わせは、非同期+非ブロッキングです。
理想的な状態:作成したコードをブロックせずに準備完了状態と実行状態に保つ必要があります
プロセスを開始する2つの方法
コードがプロセスとスレッドを開始する方法、コードの記述は基本的に同じです。プロセスを開始する方法を学び、スレッドを開始する方法を学びます
2つの方法
マルチプロセッシングインポートからプロセス インポート時間 defタスク(名前): 印刷( '%sが実行中'%name) time.sleep(3) 印刷( '%sがオーバー'%名) if __name__ == ' __main__ ': #1オブジェクトを作成します p = Process(target = task、args =( 'jason'、)) #コンテナータイプ内部に要素が1つしかない場合でも、コンマを使用して区切ることをお勧めします #2プロセスを開始します p.start()#オペレーティングシステムに指示しますプロセス非同期 印刷を作成します( 'main') # マルチプロセッシングインポートからのクラス継承の2番目の方法プロセス インポート時間 クラスMyProcess(Process): def run(self): print( 'hello bf girl') time.sleep(1) __name__ == '__main__'の場合は、 印刷( 'get out!') : p = MyProcess() p.start() 印刷( 'メイン')
Windowsオペレーティングシステムでは、作成プロセスはメインで作成する必要があります。Windowsでの作成プロセスはモジュールのインポート方法と似ているため、上から下に実行されます
最初の方法がより使用されます
まとめ
プロセスを作成するには、メモリ内のメモリ空間の一部を申請し、実行する必要があるコードをスローします。プロセスはメモリ内の独立したメモリ空間に対応し、複数のプロセスは複数の独立したメモリ空間に対応します。
デフォルトでは、プロセス間のデータを直接操作することはできません。操作したい場合は、他のツールやモジュールを使用できます。
結合方法
メインプロセスが子プロセスの終了を待った後、実行を続けます
その結果、非同期が同期に変わります
マルチプロセッシングインポートからプロセス インポート時間 defタスク(名前、n): 印刷( '%sが実行中'%name) time.sleep(n) 印刷( '%sがオーバー'%名前) if __name__ == '__main__': #p1 =プロセス(ターゲット=タスク、args =( 'jason'、1)) #p2 =プロセス(ターゲット=タスク、args =( 'egon'、2)) #p3 =プロセス(ターゲット=タスク、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。時間() p_list = [] for i in range(1、4): p = Process(target = task、args =( '子向程%s'%i、i)) p.start() p_list.append(p) for p p_list内: p.join() print( '主'、time.time()-start_time)
プロセス間のデータ分離
マルチプロセッシングインポートからProcess money = 100 def task(): global money#局部修改全局 money = 666 print( '子'、money) if __name__ == ' __main__ ': p = Process(target = task)p.start() p.join() print(money)