併發編程多進程1.進程與程序 進程:一個正在運行中的程序 是一系列程序執行的過程的總稱(抽象概念) 程序:是有程序員將本身的思惟邏輯按照某種編程語言規範編寫下來的一堆字符串,最終造成的一堆文件 進程是有由程序產生的.沒有程序就沒有進程2.操做系統與進程 應用程序沒法直接運行在硬件之上,必定要藉助操做系統, 因此進程是由操做系統建立的 操做系統本質也是一款軟件, 與普通軟件的區別? 操做系統是真正在控制硬件的 應用程序實在調用操做系統提供的接口 主要功能: 1.幫你封裝隱藏了醜陋複雜的硬件操做,提供了簡單的,優雅的接口 2.須要將各個應用程序對硬件的競爭變得有序3.多道技術的演變 多道技術是爲了解決同一時間只有一個應用程序被執行的問題 多道技術提升效率的原理就是經過空間複用和時間複用 空間複用:同一時間在內存中存放多個應用程序 時間複用: 切換 1.當一個程序A 在執行過程當中與到IO操做(IO一般都是很是慢的) 操做系統就會切換到另外一個程序執行 感受像是多個應用程序都在執行 (併發) 2.當一個程序A 執行時間過長 也會強制切換到其餘的應用程序,以此保證度多個程序都在執行 3.若是出現了一個優先級更高的任務 也會切換 保存狀態 當一個操做系統要從一個進程切換至另外一個進程時,必須保存當前進程的狀態,以便下次切換回來的時候繼續執行 強調: 多個進程之間內存要相互獨立,而且是物理層面的隔離(程序是不可能修改的),以保證安全性 多道技術帶來的好處 1.同一時間能夠有多個應用程序在執行 在IO比較多時 極大的提升了效率 弊端: 若是全部應用程序都沒有IO操做,反而會下降效率 應用程序的執行效率取決於IO操做,IO操做越多則效率越低. 提升效率: 1.減小IO 2.避免被操做系統切換4.進程的狀態 阻塞態 遇到IO操做了 運行態 正在運行中 就緒態 準備好運行了,等待cpu權限5.併發,並行,串行,阻塞 默認狀況下 代碼是串行的 串行: 按照順序依次執行 第一行執行完畢後纔會執行第二行 須要注意的是 串行執行的過程當中 由於計算操做太多也會致使程序卡住 可是這與io阻塞是不一樣的 io阻塞立馬將CPU切到其餘進程 而串行執行一堆計算任務 CPU沒有切走 阻塞: 指的是進程的狀態 併發: 指多個事件同時發生了(單核下就是經過切換+保存狀態來實現 就是多道技術) 並行: 真正意義上的同時執行 (只在多核處理器纔有可能出現)6.多進程的使用 方式一: windows 開啓子進程 與 linux開啓子進程方式不一樣 爲何開子進程? 是由於有一段代碼要交給他 因此他必定套讀取你的數據 才能幫你處理 linux 會直接將主進程的內存 完整copy到本身的空間中 windows 導入你的程序代碼 執行一遍生成如出一轍的數據 那就意味這若是子進程讀到了建立子進程的代碼 它也會建立子進程 結論: 在windows中 建立子進程的代碼必須放main判斷下面 方式二: 繼承Process類 覆蓋run方法,寫上本身的語法,就能夠在調用本身的類時建立 子進程來運行本身的語法7.殭屍進程與孤兒進程 殭屍進程是指父進程生成了不少子進程,子進程在調用結束後會產生一些關於子進程 的pid,關閉時間之類的信息保存在子進程中,只有當父進程調用wait方法時纔會關閉 子進程,期間子進程處於Z狀態,佔用pid,因此殭屍進程是有害的 孤兒進程是指父進程生成了子進程,子進程還沒關閉,父進程就關閉了,這樣這些子進程 就成了孤兒進程,會被操做系統收養,並對他們使用wait方法來關閉它們,因此它們是無 害的.