进程与多并发
01 進程的初始
程序:應用軟件,一堆代碼文件
進程:一個正在執行的程序/文件,抽象的概念
啟動一個進程具體過程:
程序存在硬盤,磁盤中,當你雙擊(出發了)操作系統,操作系統就會將你的程序加載到內存,然后交于cpu進行處理
進程的由來:源于操作系統
02?操作系用的發展史
一個進程:cpu?去刷碗,炒菜
來一個任務(活)?獻給操作系統,然后有操作系統給了cpu:cpu做這個任務才是一個進程
操作系統:
? 1.定義 :?操作系統就一個軟件,管理,協調,控制計算機硬件與軟件之間的控制軟件.
2.作用:
如果現在沒有操作系統,讓你完成一個程序:
寫兩層:
1,如何調用控制cpu,硬盤,內存
2.具體的你的程序的代碼.
a,將一些丑陋的與硬件的接口變成了漂亮的美麗的接口.
f = open(三要素)
同一時刻多個進程共同搶占一個cpu資源.
b.操作系統要合理的有序的去安排不同的進程的執行順序問題.
操作系統與軟件的區別:
操作系統與用戶的禪意并不在于二者所處的地位.特別的,操作系統是一個大型,復雜,長壽的軟件
操作系統的發展史:
機械類:算盤
電子類的計算機:第一代:二戰時期哈佛大學創建的電子計算機
工作流程:程序員拿著插件版(后期穿孔卡片),預約時間去計算機房?研究
第一代計算機?沒有操作系統概念的
優點:一個程序員可以獨享一個計算機
缺點:
1,浪費資源,一個計算機只能供一個人使用
2,所有的程序都是串行的,效率很低.
第二代計算機:分為三部分,兩個機器組成
工作流程:程序員按照程序將字節的穿孔卡片(10個)給了1401?轉化為磁帶 ,?交給7094機器運行處結果
有點:批處理,節省了計算機的時間
缺點:
1,中間傳輸還需要人員參與,效率低
2,所有程序還是串行處理
3,每個人不能獨享計算機了,而且你的bug不能及時修復
?
第三代計算機:集成電路,多道程序技術
一個程序:IO(Input Output)計算
計算機:既可以處理IO,又可以處理計算.
單個cpu:
多道技術:
炒菜,洗衣服,洗腳
前提:如果這三家事情沒有一點IO,全部都是計算,
空間上的復用:(內存可以加載很多個不同的任務)
時間上的復用:(好比cpu處理3個任務? 炒菜,洗衣服,洗腳)
1,遇到進程中的IO時,cpu就切換
IO:用戶輸入input,f.read()
2,一個進程長時間被cpu處理時,操作系統就強硬的將cpu掉出去處理下一個進程
?
如果每個進程都有不同的IO阻塞,遇到進程中的IO時,cpu就切換,極大地提升了效率
炒菜: 10 10 20分鐘
洗衣服: 10 40 50分鐘
拖地: 20 5 25分鐘
串行: 95分鐘.
并發:一個cpu在同一個時刻處理不同的進程,任務.
50 分鐘.
如果每個進程都沒有IO阻塞,:一個進程長時間被cpu處理時,操作系統就強硬的將cpu調出去處理下一個進程.
為什么這么做?
假如有一個任務 不著急但是非常耗時 1 + 2+幾千億.
另外兩個任務時間短,很著急:
?
第三代計算機初期還有缺陷:
1.內存級別各種進程間的數據物理隔離.
2.沒有達到個人獨享的效果
過了幾年:
分時系統,對內存級別的數據進行物理隔離
unix分賬戶概念,讓人們認為自己的獨享計算機
?
03? 概念:串行,并發,并行,阻塞,非阻塞
串行:cpu將一些進程一個接一個的執行(之前寫的代碼都是串行)
并發:一個cpu執行多個任務,看起來像是同時執行的
并行:真正意義的一對一服務
4個CPU? 處理4個任務
阻塞:IO成為阻塞
一個cpu串行執行10個任務,這10個任務前提如果沒有IO,執行第一個任務是,下面九個都在等待,這叫阻塞
非阻塞:進程沒有IO,就非阻塞.
05 進程的詳解
進程與程序的區別.
并發并行.
進程的創建:
如何創建一個進程?
雙擊qq開啟一個進程,運行一個py文件,開啟一個進程,我如何開啟多個進程.
十個任務,你如何將十個任務開啟起來?
你的程序中如何開啟多個進程?
他的思路就是我要有一個主(父)進程,在這個代碼里面有一個命令,通知操作系統再給我開一個進程,你把代碼放進這個進程中,
這樣就相當開啟了兩個進程.
兩類系統開啟進程的命令不同:
linux(unix,macos):fork
windows:CreateProcess
兩類系統開啟進程內部方式稍有不同:
linux(unix,macos): 會將主進程的所有數據復制一份,放到進程空間中.
windows:
進程并發的實現: 進程遇到IO阻塞或者長時間運行,操作系統會將你的進程掛起, + 保持原來的狀態.
今日總結:
進程
進程與程序的區別.
操作系統發展史
多道技術,
空間,時間的復用.
串行 并發 并行 阻塞 非阻塞
詳細的進程:
不同操作系統開不同的進程的區別.
程序要想開啟多個進程:一定是在運行一個主進程(文件)時,執行此主進程的某一行開啟進程的代碼(內部會通知操作系統開始進程.).
?
?
06 進程的id 父進程的id
07 開啟進程的兩種方式
?
轉載于:https://www.cnblogs.com/wjw6692353/p/10434551.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
- 上一篇: 44. xargs命令
- 下一篇: C++_异常6-其他异常特性