Python-----並發,並行,進程,多進程


  1. 進程基礎知識

    1. 程序是什么?

      程序就是一堆文件.

    2. 進程是什么?

      進程就是一個正在執行的文件/程序,抽象的概念.

    3. 進程被誰執行?

      cpu最終運行你的程序.

      操作系統調度作用.將你的磁盤上的程序加載到內存,然后交由CPU去處理.一個cpu正在運行的一個程序,就叫開啟了一個進程.

  2. 操作系統

    1. 操作系統的定義

      操作系統是存在於硬件與軟件之間,管理,協調,控制軟件與硬件的交互.

    2. 操作系統的作用:

      1. 如果沒有操作系統,你去寫一個程序,你只要完成兩層即可.

        第一層: 你要學會底層硬件:cpu,內存,磁盤是如何工作使用的.

        第二層: 去調用這些底層的硬件.

        操作系統第一個作用:將一些丑陋復雜的硬件操作封裝成美麗的接口,便於使用.

        open()

      2. 操作系統的第二個作用:

        你的計算機(單個cpu情況)看似可以處理多個進程,看電影 + 玩紙牌游戲 + qq聊天 + 12306搶票.....

        操作系統第二個作用: 合理的調度分配多個進程與cpu的關系,讓其有序化,

  3. 操作系統(計算機)的發展史(多道技術)

    計算機: 機械式計算機.算盤.

    電子計算機:發展史.

    1. 第一代電子計算機(1940~1955)

      二戰時期,推出的電子計算機 手工操作.預定.類似於插線板的程序,計入機房,一個人獨資享有計算機2個小時,各種硬件的操作插線與你的程序結合.

      特點: 沒有操作系統的概念,所有的硬件連接都是自己完成.

      優點: 一個人獨享.

      缺點:

      1. 一個人享用浪費資源.
      2. 所有的程序都是串行處理.
    2. 第二代計算機:磁帶存儲,批處理系統.(1955~1965)

      不需要程序員本人繼續硬件的操作,所有的硬件的操作都已經是成型的機器了.

      每個程序員將自己的程序可在磁盤上.就可以走了.中間有工作人員將你的代碼磁盤運行,最后打印結果.

      優點: 節省了程序員連接個硬件的操作的時間.

      缺點:

      1. 不能獨享計算機,不能在程序運行時修復bug.
      2. cpu還是串行處理.
    3. 第三代計算機,集成電路,多道程序系統.

      集成電路概念,所有的硬件變的很小,排列在線路板上.

      20世紀60年代初: 計算機兩條生產線:互不兼容

      1. 用於科學計算,運算的 計算密集型.

      2. 用戶商用保險銀行,歸檔,打印等工作. IO 密集型.

        阻塞; IO阻塞,recv, accept, read input,write, sleep等等,都是阻塞.

      system/360系列: 將兩種計算機類型合並成一個.

      第三代計算機解決一個問題: 人工中途參與磁盤傳遞工作,以及輸入輸出設備不同機的問題.

      第三代計算機解決第二個問題: 多道技術.

      知識點解釋:

      辦一個效率高,效率低的問題.

      你洗衣服,20分鍾,20分鍾,你(cpu)一直沒有閑着.cpu處理的效率高(利用率,滿負荷),

      洗衣服: 10分鍾, 40分鍾, # 以耗時最長的進程結束為准

      聊天 : 20分鍾, 10分鍾

      燒水: 3分鍾, 5分鍾

      如果三個進程全部都沒有IO阻塞,多道技術就會影響最終的效率.

      多道技術解決的第一個問題: 時間上的復用.

      第一代,二代計算機一個內存只允許加載一個進程.

      第三代計算機開始,多道技術結局了提高內存的利用率: 空間上的復用.

      一個內存可以加載多個進程.

      空間上的復用: 當年面臨着一個問題,數據隔離.

      麻省理工(MIT)在一台改裝過的7094機上開發成功的,CTSS兼容分時系統.

      一個問題: 還是不能獨享

      最終第三代計算機推廣使用.

  4. 進程介紹(理論部分)

    1. 進程與程序的區別.

      pass

    2. 介紹幾個概念.

      串行: 所有的進程由cpu一個一個的解決.

      並發:單個cpu,同時執行多個進程(來回切換的),看起來像是同時運行.

      並行:多個cpu,真正的同時運行多個進程.

      阻塞:遇到IO才叫阻塞.

      一個cpu運行兩個進程,其中一個進程完全沒有阻塞,

      非阻塞: 沒有IO.

    3. 進程的創建.

      什么是開啟多個進程: socket: server,client 兩個進程.

      python中,如果一次想開啟多個進程,必須是一個主進程,開啟多個子進程.

      linux, windows: 由主進程開啟子進程:

      相同點: 原則:主進程開啟子進程兩個進程都有相互隔離的獨立的空間,互不影響.

      不同點:

      ​ linux: 子進程空間的初始數據完全是從主(父)進程copy一份.

      ​ windows: 子進程空間的初始數據完全是從主(父)進程copy一份,但是有所不同.

    1563522853276

  5. python並發編程之:多進程

    from multiprocessing import Process
    import time
    def task(name):
        print(f'{name} is running')
        time.sleep(3)
        print(f'{name} is done')
    if __name__ == '__main__':
        p = Process(target=task,args=('懟哥',))
        p.start()
        print('===主進程')
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM