day_29

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

  • パンチカード

  • オンラインバッチ

  • バッチオフライン

  • マルチチャネル技術:

    シングルチャネル:プログラムの実行文字列の複数

    マルチチャンネル:

    +状態の切り替えを保存

  • 空間で多重化

    コンピュータ(CPU)、空間は、用途の複数に提供することができます。

  • 時間上で多重化

    現在のプログラムは、IO操作が発生し、それがすぐにCPUが実行権限を切り替えます

    現在のプログラムは、CPU時間を使用して長すぎる、それはすぐにCPUが実行権限を切り替えます

  • 並行並列

    • 同時実行:同時実行のように見えます。
    • パラレル:ランは本当に同時に感知します。
    • パラレルシングルコアの場合には達成できない、平行を達成するために、CPUが複数存在しなければなりません

プロセス

  • プログラム:コードの束。

  • プロセス:実行するコードの束のプロセス。

  • 法律のタイムスライス+評価・フィードバック・キュー:プロセスのスケジューリング

  • プロセスの三つの状態:

    • レディ状態

      すべてのプロセスは、最初の準備状態になります作成されます

    • Runnableを

      スケジューリングの処理により、各プロセスは、状態を実行するために転送されます

    • ブロッキング状態

      出会いIOの動作モードでのプログラムは、ブロッキング状態になります

      IO側が、すぐに準備状態になります場合は、直接実行している状態にはなりません

      注:長すぎるためCPUの実行時間は、障害物のように見えますが、実際には、ブロックされていない、そのCPUが実行権限を奪い、その後、プロセスは準備状態に戻ります。

  • 同期および非同期

    • 同期:タスクの提出後、まだこのミッションの終了を待って、次は提出して実行します
    • 非同期:タスクの提出後、待つ必要はありませんし、すぐに次のタスクを実行することができます
  • ブロッキングとノンブロッキング

    • ブロッキング:ブロッキング状態(IOが発生し、遮断状態となります)
    • ノンブロッキング:準備完了状態、実行状態
  • 2つの方法でプロセスを作成します。

    • from multiprocessing import Process
    • import time

    一つの方法:

    def task():
        print('子进程开始执行')
        time.sleep(1)
        print('子进程结束完毕')
        # 在windows系统下创建,必须要再__main__执行
        - __main__ 下:
        # target = 执行任务(函数地址)
        p = Process(target = task)
        p.start() #告诉操作系统,创建子进程
    
        # join
        p.join() # 让主进程等待所有子进程结束后才能结束
        print('主进程')

    第二の方法:

    - 自定义类,继承Process
    class Myprocess(Process):
        def run(self):
            # 此处是子进程的任务
            print('子进程开始执行')
            time.sleep(1)
            print('子进程结束完毕')
    
      - __main__下:
          p = MyProcess()
            p.start() # 告诉操作系统,创建子进程
            # join
            p.join() # 让主进程等待所有子进程结束后才结束
            print('主进程')
    • 参加する()すべての子プロセスを終了するために待機した後、メインプロセスを取得します
    • プロセス間のデータが分離され
    • プロセスオブジェクトのプロパティ
    # 可以获取子进程 pid号
    current_process().pid --->return Process().pid
    # 在子进程中打印是子进程的pid号,在父进程中打印父进程的pid号
    os.getpid()
    # 主主进程pid号
    os.getppid()
    
    current_process()-->p
    # 终止子进程
    p.terminate()
    # 判断进程是否存活
    is_alive
  • デーモン

    メインコースの後、あなたは子プロセスの終了に従わなければなりません

    # 注意:必须要在start()之前设置
    p.daemon = True
    p.start()
    # p.daemon = True 报错
  • 親プロセスは子プロセスのPID番号を回復するには、2つの方法があります。

    • 加わります
    • 親プロセスの終了後にノーマル
  • ゾンビプロセスと孤立(理解して):

    • ゾンビプロセスは:子プロセスの後、親プロセスは回復しないPID子につながる、永続的に保持するPID

      短所:職業のPID数、オペレーティングシステムリソースを占有

    • 孤児プロセス:子プロセスが終了していない、親プロセスは子プロセスが親プロセスの終了時にリサイクルすることができない原因となる、予期せず終了します

      これは、「オーファン」として子供を行い、その後に付属しているオペレーティングシステムによって回収「福祉」。

プロセスミューテックス

データのセキュリティを確保するため、効率を犠牲にして、シリアル同時になろう

プログラム同時実行、データを変更する必要があるときに使用します

キュー

これは、FIFOキューです

生成されたキュー・メモリ空間に対応して、複数のデータを格納することができ、データは、上面に移ります

スタック

スタックは、最後のアウトです

IPC(プロセス間通信)

プロセス間通信を実現するためにあるとき、プロセス間データ、キューが利用されてもよく、互いに分離

生産者と消費者

メーカー:生産データ

消費者:データの使用

プログラムでは:キューを介して、キューデータの生産を追加し、消費者は、キューからデータを取得します

スレッド

スレッドとは何ですか

スレッドとプロセスが仮想ユニットであり、その目的は、より良い何かについて説明することです

  • プロセス:リソースユニット
  • スレッド:実装ユニット

なぜ使用のスレッド

メモリリソースを保存します

オープンプロセス

  1. 開いている各プロセスの名前は、メモリリソースのコピーを取るためのスペースを開き
  2. ウィルは、メインスレッドが付属しています

オープンスレッド

  1. プロセスは複数のスレッドを開くことができます
  2. オーバーヘッドは、スレッド処理よりもはるかに小さいです

注:スレッドが並列を達成することはできません、並列スレッドのみ達成することができ、プロセスが並行して実施することができます

スレッドのミューテックス

データは、スレッド間で共有されます

おすすめ

転載: www.cnblogs.com/maqiaobin/p/11721871.html