並行プロセスのプログラミングの基本

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

並行プログラミングは、我々は、オペレーティングシステムの履歴から必要なので、学ぶことから始まり、実際のオペレーティングシステムの基本原則の研究である研究

手動操作 - パンチカード

1946年最初のコンピュータは、半ば20世紀の1950年代に誕生したコンピュータ作業はまだ手動モードを使用しています。この時点で、オペレーティング・システムの概念はありません。Snipaste_2019-12-06_16-49-19

入力装置にロードされている(またはカード)プログラマストリップに対応したプログラムやデータを穿孔し、コンピュータ・プログラム及びデータメモリに入力するマシンを起動し、データは、プログラムを開始するためのコンソールスイッチを介して実行され、計算され、プリンタを計算結果を出力し、その結果、ユーザーがマシンに次のユーザを許可する前に、テープ及び削除(またはカード)を除去した後。

手動モードの二つの特徴:

  (1)ユーザ排他全体のマシン。リソースが他のユーザーと待ち時間が、リソースの低利用率によって占有されているので、現象は発生しません。

  (2)CPUは、手動操作を待ちます。CPU使用率が十分ではありません。

  1. 1、パンチカード
  • 遅い速度は特データを読み取れません
  • CPU使用率が非常に低いです
  • シングルユーザー(コード)を使用して、
  1. 2、バッチ
  • 非常に遅い読み出しデータ
  • CPU使用率が非常に低いです
  • 使用してオンライン(複数のコード)
  • 効率はまだ低いです
  1. 3、オフラインバッチ(現代のオペレーティングシステムの設計原理
  • より高速なデータを読みます
  • CPU使用率が改善します

2、マルチチャネル技術

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

  • シングルチャンネル:パス、して歩く--------シリアル

    例えば:、CPUを使用する必要性、一審、B bを使用CPUに順に、Bを待った後、最大使用

  • マルチチャンネル

    例:「IOや実行時間が長すぎる」と入力するまでCPU、最初の使用、B待機を使用するために、Bの必要性、(状態を切り替え保存+)になり、その後、CPUはIO」の実現に遭遇するために使用されるB、Bすることができまたは実行時間が「長すぎる場合、CPUは、二つのプログラムが終了するまで、実行権限を

スペースに多重化:

CPUを複数使用しています

時間上で多重化:

保存状態の切り替え+

プログラムの実行は、IO、オペレーティング・システムが許可CPU欠乏を実行する遭遇1、

長所:CPUの効率を向上させます

2、プログラムの実行時間が長すぎる、長すぎるオペレーティングシステムを実行する場合には、オペレーティング・システムは、権限のCPUの剥奪を実行します

短所:低効率化プログラム

図3に示すように、並列同時

同時実行:実行のように見えます

シングルコア(CPU)場合には 2つのA、Bのプログラム、顔IO最初の実行を行う場合、bは許可CPUを実行し、Bの実行をさせスクランブルし始め、それらは同時にように見えますポジティブな意味で実行するように運びます。

パラレル:本当の意味での実行

マルチコア(S CPU)の場合の 2つのA、Bの手順を実行する場合、AとBが同時に行われます。彼らは、真の意味で実行されています。

フェイス質問:シングルコアの並列処理の場合には達成することができますか?ない仕事

4、工程

1.プロセスとは何ですか?

プロセスは、リソースユニットであります

2、プロセスと手続き:
手続き:コードファイルのペア

プロセス:コードを実行するプロセス、プロセスと呼ばれます

3、スケジューリングのプロセス(理解)

1) 先来先服务调度算法(了解)
    - 比如程序 a,b,若a先来,则让a先服务,待a服务完毕后,b再服务。
    - 缺点: 执行效率低。

2) 短作业优先调度算法(了解)
    - 执行时间越短,则先先调度。
     缺点:
     导致执行时间长的程序,需要等待所有时间短的程序执行完毕后,才能执行。

现代操作系统的进程调度算法: 时间片轮转法 + 多级反馈队列  (知道)

3) 时间片轮转法
     - 比如同时有10个程序需要执行,操作系统会给你10秒,然后时间片轮转法会将10秒分成10等分。

4) 多级反馈队列:
     1级队列: 优先级最高,先执行次队列中程序。
     2级队列: 优先级以此类推
     3级队列:

図5に示すように、同期および非同期

同期および非同期の手段「の提出タスク」

同期(シリアル):

2つのA、Bおよび執行への最初の提出後、bはタスクを送信するためには、完成を待つ必要があれば、プログラムは提出する必要があります実行されます。

非同期(同時):

2つのA、Bおよび提出し、完成を待たずに、bは、あなたが直接ジョブを送信することができた場合に実行するために、プログラムを提出する必要があります実行します。

6、ブロッキングおよび非ブロッキング

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

これらの人の出会いは、IOをブロックします

IO:、 、input() データの送信output()time.sleep(3)

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

すべての非ブロッキングIOに加えて、(例えば:1 + 1から1000000から数えて)

7つの三つの状態のプロセス

レディ状態:

同期および非同期(ジョブ送信)

実行状態:

プログラムの実行時間が長すぎる---->レディ状態に戻るのです

ノンブロッキング

状態をブロックします:

IOの出会い

質問インタビュー:ブロックとの同期は、あなたと同じですか?そして、非同期の非ブロッキングはあなたと同じですか?

  • 提出タスク:同期および非同期
  • プロセスの状態:ブロッキングとノンブロッキング
  • 非同期および非ブロック、CPU年代の利用率を最大化

図8に示すように、二つの方法を作成するプロセス。

一つの方法:

from multiprocessing import Process
import time

def task(name):
    print(f'start{name}---')
    time.sleep(3)
    print(f'end{name}---')

if __name__ == '__main__':
    print("开始执行主进程。。。")
    #target=任务(函数地址)--->创建一个子进程
    #异步提交了3个任务
    obj1 = Process(target=task,args=('letin',))#args内是元组,注意加‘,’
    obj2 = Process(target=task,args=('letin',))
    obj3 = Process(target=task,args=('letin',))
    obj1.start()    #.start()告诉操作系统,去创建一个子进程
    obj2.start()
    obj3.start()
    # obj1.join()   #告诉主进程,等待子进程结束后,在结束
                    #主进程是当前程序(程序的执行过程)
    
结果:
开始执行主进程。。。
startletin---
startletin---
startletin---
endletin---
endletin---
endletin---

第二の方法:

メソッド継承されたプロセス

from multiprocessing import Process
import time

class MyProcess(Process):
    def run(self):
        print(f'start...{self.name}的子进程')
        time.sleep(3)
        print(f'end...{self.name}的子进程')

if __name__ == '__main__':
    list1 = []
    
    for line in range(4):
        obj = MyProcess()
        obj.start()
        list1.append(obj)

    for obj in list1:
        obj.join()

结果:
start...MyProcess-4的子进程
start...MyProcess-2的子进程
start...MyProcess-3的子进程
start...MyProcess-1的子进程
end...MyProcess-4的子进程
end...MyProcess-2的子进程
end...MyProcess-3的子进程
end...MyProcess-1的子进程
主进程

おすすめ

転載: www.cnblogs.com/leiting7/p/11997020.html