並行プログラミング - オペレーティング・システム、マルチチャネル技術の歴史、プロセス

並行プログラミング - オペレーティング・システム、マルチチャネル技術の歴史、プロセス

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

パンチカード1.1

  • 非常に遅い読み出しデータ
  • CPU使用率が非常に低いです
  • シングルユーザー(コード)を使用して、

1.2バッチ

  • 非常に遅い読み出しデータ
  • CPU使用率が低く、
  • 使用してオンライン(複数のコード)

1.3オフラインバッチ(最新のオペレーティングシステムの設計原則)

  • 読み取り速度
  • CPU使用率が増加しました

(単球の背景に基づいて)マルチチャネル技術

シングルチャネル:1つの方法(シリアル)

例えば:、CPUを使用する必要性、最初に使用し、B bを使用CPUに、Bを待った後に使い切ります。

マルチチャンネル:GOを割り当てる方法

例えば:、Bの必要性は、(+状態の保存スイッチ)、そしてbは使用されているCPUすることができますが、「IOまたは実行時間が長すぎる」に入るまで、Bを待って、CPU、最初の使用を使用するように、「Bの実装に遭遇しますIOや実行時間は、2つのプログラムが終了するまでに実行権限をCPU」、長すぎます

空間で多重化

CPUを複数使用しています

時間上で多重化

保存状態の切り替え+

①:IO遭遇したプログラムを実行すると、オペレーティングシステムは、権限のCPUの剥奪を実行します。

利点:

CPUの高効率

②:プログラムの実行時間を実行すると、あまりにも長い間、オペレーティングシステムは、許可カップを拒否されます

短所:

低効率化プログラム

並行並列

並行性:このようなAlのみながら道路のセクション上などのリソースを使用して、限られたリソースの両方を交互にターンを指し、AはBを与えるために、期間が終了した後、Bは、Aを介してこの代替使用に行き続ける、改善することを目的と効率

パラレル:人種、実装、両方を意味し、二人は常に彼の前にしています

違い:

並行して実行され、唯一の複数のCPUを並列で達成することができます

並行処理が同時に実行のような擬似的な並列表情で、単一のマルチチャンネルCUP +技術は(も同時パラレル)同時ことができます

プロセス

プロセスとは何ですか?

プロセスは、リソースユニットで実行中のプロセスまたはタスクを指し

プロセスおよび手順の間の差

プログラムコードのちょうど束であるが、むしろプロセスは、プログラムを実行するプロセスを意味します。

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

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

サービスが完了するまで、第1、役立っ来るべき人は、次のサービス

短所:低効率

②:短い運転優先度スケジューリングアルゴリズム

短い時間を実行し、優先度スケジューリングは誰

短所:プログラムの実施につながった長い期間の後に、すべての手続きが完了し、短い時間を待つためにすべての必要性、あなたが行うことができます

③:ラウンドロビン方式

したがって、各プロセスは、レディキューと時間に比例したサービスを享受するための時間に待っていること。ラウンドロビン方式では、CPUのタイムスライスの要求の処理時間は、例えば、数十ミリ秒数百ミリ秒に、固定されたサイズに分割します。プロセスは、スケジュールを選択された後、タイムスライス規定のシステムから実行されますが、タスクを完了するために必要でない場合、それは彼らの自己占有CPUのリリースであり、次のスケジューリングを待って、レディキューの最後に排出されます。同時に、プロセススケジューラは、レディキューに現在のプロセスのスケジューリング行ってきました。

④:マルチレベルフィードバックキュー

同期非同期

同期非同期ぜひ「提出課題」

同期(シリアル):

唯一のタスクの完了に依存するのを待って、別のタスクに依存するタスクの必要性が完了すると、タスクは、このタスクの完了に依存して考えることができる信頼性のシーケンスです。成功に障害が発生したか、失敗した、タスクの2つの状態が一貫することができ、成功しています。

非同期(同時):

タスクの完了に依存するのを待つが、通知は限り彼らは、タスクが完了すると完了して、すぐに実行されるタスクに応じて、完全にどのような仕事のタスクに依存してする必要はありません。最後のタスクは、その使命に応じて、かどうか、本当に完全に依存していたとして、それは信頼性の低いタスクシーケンスであるので、決定することはできません。

ブロッキングとノンブロッキング・

ブロッキング(待機中):

IOはすべて満たさをブロックします。

入力()

time.sleep(3)

出力()

......

ノンブロッキング(ウェイトなし):

すべてのノンブロッキングIOに加え、

プロセスの三つの状態

  • レディ状態
  • Runnableを
  • ブロッキング状態

二つの方法のプロセスで作成

# 方式一:直接调用process
from multiprocessing import Process
import time


def task():
    print("start...")
    time.sleep(3)
    print("end...")


# 注意:要把创建子进程的部分放在  if __name__ == "__main__": 保护起来 否则在import时会造成无限递归
if __name__ == "__main__":
    # target=任务 ---> 创建一个子进程
    p_obj = Process(target=task)
    # start() ---> 告诉操作系统,去创建一个子进程
    p_obj.start()
    # join() ---> 告诉主进程,等待子进程结束后,再结束
    p_obj.join()
    print("正在执行当前主进程...")
    
    
# 方式二:继承 Process 类,并重写它的 run() 方法来创建进程类,程序创建 Process 子类的实例作为进程。
class MyProcess(Process):
    def run(self):
        print(f"{self.name}的子进程start...")
        time.sleep(3)
        print(f"{self.name}的子进程end...")


if __name__ == "__main__":
    list1 = []
    
    for line in range(10):
        obj = MyProcess()
        obj.start()
        list1.append(obj)
        
    for obj in list1:
        obj.join()
        
    print("主进程...")

おすすめ

転載: www.cnblogs.com/aheng/p/11997347.html