必須知識のレビュー
-
コンピューターは、コンピューター、つまり電気を備えた脳とも呼ばれます。コンピューターは、電源を入れたときに人間のように動作できるように考案されたものであり、24時間中断されないため、人間よりも効率的です。
-
コンピュータの5つの主要コンポーネント
コントローラー
オペレーター
記憶
入力デバイス
出力デバイス
コンピューターのコアは本当に機能しますCPU(コントローラー+演算ユニット=中央処理装置)
-
コンピュータでプログラムを実行するには、そのコードをハードディスクからメモリに読み取り、CPUが実行前に命令をフェッチする必要があります。
シングルコアが同時効果を実現
必要な知識
-
並行性
同時実行は同時実行と呼ぶことができるようです
-
平行
リアル同時実行
PS:
-
並列は並行と見なす必要があります
-
シングルコアコンピュータは並列処理を実現できませんが、同時実行性は実現できます。!!
マルチチャンネルのテクニカルイラスト
マルチチャネル技術の主要な知識
空間を取り込み、時間を取り込む
-
空間多重化
複数のプログラムが一連のコンピューターハードウェアを共有する
-
時間の多重化
例:洗濯物を30秒間、調理を50秒間、熱湯を30秒間
シングルチャネルの必要性110sと、長いタスクのことを行うためのマルチチャンネルのみ必要切り替えは、時間を節約できます
例:食べて状態を保存しながらゲームをプレイする
スイッチ+状態を保存
スイッチング(CPU)は2つのケースに分けられ
ます。1。プログラムがIO操作に遭遇すると、オペレーティングシステムはプログラムからCPU実行権限を奪います
機能:CPU使用率を改善し、プログラムの実行効率に影響を与えません
2。プログラムがCPUを長時間占有している場合、操作の誘引によってプログラムのCPU実行権限も奪われる
短所:プログラムの実行効率が低下する(元の時間+切り替え時間)
プロセス理論
必要な知識
プログラムとプロセスの違い
プログラムとは、ハードディスク上にあるコードの集まりであり、「デッド」
プロセスとは、プログラムが実行中であり、「生きている」ことを意味します。
プロセスのスケジューリング
-
先着順のスケジューリングアルゴリズム:短いジョブではなく、長いジョブに適しています
- 短いジョブの優先順位スケジューリングアルゴリズム:短いジョブには適していますが、長いジョブにはメリットがありません
- タイムスライスローテーション方式:タイムスライスは固定時間を複数の部分に分割し、各部分はタイムスライスを表します
- マルチレベルフィードバックキュー:優先度
重要な概念の2つのペア
同期および非同期
-
-
"" "タスクの送信方法を説明します" ""
-
同期:タスクがサブミットされた後、その場でタスクの結果が返されるのを待ち、待機プロセス(ドライなど)の間は何もしません。プログラムレベルでは、スタックしているように感じます。
-
非同期:タスクが送信された後、タスクの戻り結果を待たず、直接他のことを行います
-
-
- 「」「プログラムの実行状態の説明」「」
-
- ブロッキング:ブロッキング状態
- 非ブロッキング:準備完了状態、実行状態
理想的な状態:コードで常に準備完了状態と実行状態を切り替える必要があります
マルチプロセッシングインポートプロセス インポート時間 DEF タスク(名): 印刷(' %sは実行中の'%の名称) time.sleep( 3。 ) 印刷(' %Sの上にある'%の名は) IF __name__ == ' __main__ ' : #1オブジェクトを作成 p過程=(目標=タスク、引数=(「ジェイソン」)) #のコンテナタイプを一つだけの要素があっても分離するために使用コンマをお勧めします #2オープン処理 )p.startを( #あなたは非同期にプロセスを作成するためのオペレーティングシステムに知らせる 印刷(「主」) #は、クラスへの第二の方法を継承した からマルチプロセッシングインポートプロセス インポート時間 クラス:MyProcess(プロセス) DEF RUN(セルフ): 印刷(「ガールBFこんにちは」) (time.sleep。1 ) 印刷は、(' OUT GET!' ) IF __name__ == ' __main__ ' : P = MyProcess() p.start() 印刷(' マスター')
- 作成プロセスは、メモリ内のメモリ空間の一部を申請し、それに実行する必要があるコードをスローすることです。
- プロセスは、メモリ内の個別のメモリ空間に対応します
- 複数のプロセスは、メモリ内の複数の独立したメモリ空間に対応します
- プロセス間のデータは、デフォルトでは直接対話できません。対話したい場合は、サードパーティのツールとモジュールを使用できます。
結合方法
マルチプロセッシングインポートからプロセス インポート時間 def task(name、n): print(' %s is running '%name) time.sleep(n) print(' %s is over '%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の実行が終了するための#p.join()#メインプロセスを待ち継続実行バック前 #1 p1.join() #1 p2.join() #1 p3.join() START_TIME = time.time() P_LIST = [] のための I における(1 ,. 4レンジ): P =プロセス(ターゲットタスク=、引数=(' サブプロセスS%'%I、I)) p.start() p_list.append(P) のための P でP_LIST。 p.join() print(' 主'、time.time()-start_time)
マルチプロセッシングインポートプロセス マネー = 100 デフタスク(): グローバルマネー #局部修改全局 お金= 666 プリント(' 子' 、お金)場合__name__ == ' __main__ ' : P =プロセス(目標= タスク) p.start() p.join()印刷(お金)