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