Python learningOneの並行プログラミング

オペレーティングシステムの履歴

ブログを参照してください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実行権限を奪います
        欠点:プログラムの実行効率が低下しました(元の時間+切り替え時間)

 

プロセス理論

必要な知識

プログラムとプロセスの違い

プログラムはハードディスク上にあるコードの束であり、「死んでいる」
プロセスは、プログラムが実行しているプロセスが「ライブ」であることを意味します

プロセスのスケジューリング

  • 先着順のスケジューリングアルゴリズム

先着順(FCFS)スケジューリングアルゴリズムは、ジョブスケジューリングとプロセススケジューリングの両方に使用できる最も単純なスケジューリングアルゴリズムの1つです。FCFSアルゴリズムは、短いジョブ(プロセス)よりも長いジョブ(プロセス)に役立ちます。このアルゴリズムは、CPUビジージョブに適していますが、I / Oビジージョブ(プロセス)には役立ちません。
  • 短いジョブ優先順位スケジューリングアルゴリズム
ショートジョブ(プロセス)優先度スケジューリングアルゴリズム(SJ / PF)は、ショートジョブまたはショートプロセスに優先順位を付けるアルゴリズムを指します。このアルゴリズムは、ジョブスケジューリングとプロセススケジューリングの両方に使用できます。ただし、長いジョブには適していません。緊急のジョブ(プロセス)がタイムリーに処理される保証はなく、ジョブの長さは概算です。
  • タイムスライスローテーション方式+マルチレベルフィードバックキュー

 

プロセス実行の3つの状態図

 

 

重要な概念の2つのペア

  • 同期および非同期

"" "タスクの送信方法を説明します" ""
同期:タスクが送信された後、タスクの戻り結果が配置されるまで待機し、待機中は何もしません(など)。
    プログラムレベルでのこだわり

非同期:タスクが送信された後、タスクの戻り結果を待たず、直接他のことを行います
    送信したタスクの結果を取得するにはどうすればよいですか?
    タスクの戻り結果は、非同期コールバックメカニズムによって自動的に処理されます

  

  • ノンブロッキング
「」「プログラムの実行状態の説明」「」
ブロッキング:ブロッキング状態
非ブロッキング:準備完了状態、実行状態

理想的な状態:コードで常に準備完了状態と実行状態を切り替える必要があります

上記の概念の組み合わせ:最も効率的な組み合わせは非同期の非ブロッキングです

 

プロセスを開始する2つの方法

マルチプロセッシングからインポートプロセスの
 インポート時間


デフタスク(名):
     印刷' %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()
    印刷' マスター'

 

まとめ

作成プロセスは、メモリ内のメモリ空間の一部を申請し、それに実行する必要があるコードをスローすることです。
プロセスは、メモリ内の個別のメモリ空間に対応します
複数のプロセスは、メモリ内の複数の独立したメモリ空間に対応します
プロセス間のデータは、デフォルトでは直接対話できません。対話したい場合は、サードパーティのツールとモジュールを使用できます。

 

結合方法

参加とは、メインプロセスがサブプロセスコードの実行が完了するのを待ってから続行することです。他の子プロセスの実行には影響しません。

マルチプロセッシングからインポートプロセスの
 インポート時間


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)

 

プロセス間のデータ分離

マルチプロセッシングインポートプロセスから


お金 = 100


DEF タスク():
     株式会社無料で参加マネー   #はローカルでグローバルを変更します
    お金= 666
    印刷' ' 、お金)


if  __name__ == ' __main__ ' 
    p =プロセス(ターゲット= タスク)
    p.start()
    p.join()
    プリント(お金)

 

おすすめ

転載: www.cnblogs.com/imark7/p/12757987.html