python编程理论_Python并发编程理论篇,来看看
其實(shí)關(guān)于Python的并發(fā)編程是比較難寫(xiě)的一章,因?yàn)樯婕暗降闹R(shí)很復(fù)雜并且理論偏多,所以在這里我盡量的用一些非常簡(jiǎn)明的語(yǔ)言來(lái)盡可能的將它描述清楚,在學(xué)習(xí)之前首先要記住一個(gè)點(diǎn):并發(fā)編程永遠(yuǎn)的宗旨就是提高程序的運(yùn)行效率,也是圍繞CPU來(lái)進(jìn)行優(yōu)化的一種技術(shù)手段。
像我們之前學(xué)習(xí)過(guò)的網(wǎng)絡(luò)編程中,我們只是基于socketserver模塊讓我們的Server端有了處理多任務(wù)的能力,但是我們并不了解它的底層是怎么做到的,在學(xué)習(xí)完并發(fā)編程后,嘗試自己閱讀一下socketserver源碼,你將會(huì)大有收獲。
并發(fā)編程很重要嗎?是的,非常重要,如果你想進(jìn)入PythonWeb領(lǐng)域那么著名的框架如Django,Tornado,Flask等等底層都是有基于本章節(jié)的知識(shí)點(diǎn),如果你想進(jìn)入爬蟲(chóng)領(lǐng)域那就更不用說(shuō)了,非常強(qiáng)大的scrapy框架也是基于我們所學(xué)的這些東西累積起來(lái)的。
好了廢話(huà)不多說(shuō),讓我們開(kāi)始進(jìn)入并發(fā)編程的學(xué)習(xí)吧。
從任務(wù)處理角度看待操作系統(tǒng)發(fā)展史
這一節(jié)主要是理論知識(shí),了解計(jì)算機(jī)任務(wù)處理方式的演變過(guò)程,能夠讓我們更快的理解和學(xué)習(xí)并發(fā)編程。
首先,我們先來(lái)回顧一下操作系統(tǒng)方面的一些知識(shí)。
操作系統(tǒng)的作用:管理硬件,目的就是讓用戶(hù)更加方便的來(lái)操控計(jì)算機(jī)底層的硬件。
可以看到操作系統(tǒng)對(duì)于人們操控計(jì)算機(jī)進(jìn)行作業(yè)有著不可小覷的功勞,那么在早期沒(méi)有操作系統(tǒng)的時(shí)候你能想象是什么樣子嗎?現(xiàn)在我們來(lái)看一看。
無(wú)操作系統(tǒng)時(shí)任務(wù)的處理方式
早期的計(jì)算機(jī)并沒(méi)有操作系統(tǒng),而是通過(guò)紙帶來(lái)進(jìn)行程序的編輯,它有三臺(tái)設(shè)備分別是:輸入機(jī),計(jì)算機(jī),輸出機(jī)。
這個(gè)時(shí)代的計(jì)算機(jī)一次只能跑一個(gè)人的程序,沒(méi)有其他干擾,那么它的缺點(diǎn)也很明顯,一次只能一個(gè)人使用而后面想要使用的人必須得等待前一個(gè)人用完之后才行。其執(zhí)行效率非常低下,最關(guān)鍵的就是人在進(jìn)行與計(jì)算機(jī)交互的時(shí)候計(jì)算機(jī)的運(yùn)算器是沒(méi)有任何工作的,這就造成了資源上極大的浪費(fèi),那么這種浪費(fèi)可以理解為I/O阻塞。
為了解決這個(gè)問(wèn)題,批處理系統(tǒng)橫空出世了。
批處理系統(tǒng)的誕生
相比于前一代計(jì)算機(jī)處理任務(wù)的方式,批處系統(tǒng)的誕生讓這一代計(jì)算機(jī)有了極大的進(jìn)步,并且輸入也不再使用紙帶,而是采用磁帶,批處理操作系統(tǒng)可以將多個(gè)用戶(hù)的任務(wù)同時(shí)提交(但是不能同時(shí)運(yùn)行)。
假設(shè)有三個(gè)程序員需要使用這臺(tái)計(jì)算機(jī),他們將自己的程序全部交由一個(gè)程序員讓其進(jìn)行人機(jī)之間的交互,那么這樣就節(jié)省了三倍的時(shí)間。但是這樣的缺點(diǎn)也很明顯,只能等待三個(gè)人的程序全部處理完后大家才能拿到各自的結(jié)果,這個(gè)等待過(guò)程是十分漫長(zhǎng)的。
在這里,出現(xiàn)了一種自動(dòng)化的工作方式,計(jì)算機(jī)也就是中間的7094機(jī)器能夠去區(qū)分出每個(gè)程序員自己的程序,那么其內(nèi)部肯定是由一種代碼支持它有了這種功能,那個(gè)這個(gè)就是批處理系統(tǒng)。
單處理的批處理系統(tǒng)最大的缺點(diǎn)依然還是擁有I/O阻塞,能不能把中間的兩個(gè)小人全部干掉讓計(jì)算機(jī)來(lái)做他們做的事兒呢?當(dāng)然可以,但是…當(dāng)時(shí)的人還沒(méi)那么聰明。
image-20200629232414224
我們?cè)賮?lái)想一個(gè)問(wèn)題,如果程序員A的程序出錯(cuò)了,它第一時(shí)間拿不到,返回會(huì)一直卡在那,程序員B和程序員C也不用拿了,反正都出不來(lái)。是不是很蛋疼?
后來(lái)慢慢的經(jīng)過(guò)時(shí)間的積累與技術(shù)的成熟,針對(duì)這一代的批處理系統(tǒng)的缺點(diǎn),又出現(xiàn)了新一代操作系統(tǒng)。
多道程序設(shè)計(jì)與分時(shí)操作系統(tǒng)的誕生
在這一代操作系統(tǒng)中最先出現(xiàn)了一種技術(shù),名叫SPOOLING技術(shù),這個(gè)技術(shù)的出現(xiàn)讓上圖的兩個(gè)小人下崗了。SPOOLING技術(shù)的出現(xiàn)極大的減少了I/O阻塞的時(shí)間,除此之外,該代操作系統(tǒng)還提出了一個(gè)非常重要的思想,即多道程序設(shè)計(jì)的思想,這個(gè)技術(shù)思想目前在我們的進(jìn)程中依然存在,它的主要功能就是解決了順序執(zhí)行(串行)的問(wèn)題。
image-20200629234014499
盡管這樣做的確讓程序效率提高了,但是我們還有一個(gè)問(wèn)題。計(jì)算機(jī)中依然是批處理系統(tǒng),還是要等A,B,C的叅櫊程序同時(shí)出結(jié)果才能拿到最終結(jié)果,這個(gè)時(shí)間太長(zhǎng)了,就想上面說(shuō)的如果程序員A的程序出錯(cuò)了卡住了程序員B和C的正常程序也取不出來(lái)。
有的人開(kāi)始懷念最早的無(wú)操作系統(tǒng)時(shí)代的計(jì)算機(jī)了,太懷念了,我一個(gè)人的程序十分鐘我就出來(lái)了,三個(gè)人的我要等三十分鐘,如果有一個(gè)出錯(cuò)了我的等在久也出不來(lái),我太難了…
為了解決這種問(wèn)題,出現(xiàn)了極為牛逼的分時(shí)操作系統(tǒng)。
分時(shí)很形象的一個(gè)比喻就是一臺(tái)電腦給A,B,C每個(gè)程序員一個(gè)鍵盤(pán)鼠標(biāo)和顯示器,大家共有一個(gè)主機(jī)各玩各的互不影響,都認(rèn)為自己的程序是獨(dú)享的并且馬上就能看到自己程序的運(yùn)行結(jié)果,你說(shuō)牛不牛逼?大家都很開(kāi)心,但是實(shí)際上大家還是共用的同一個(gè)CPU…(多用戶(hù)多任務(wù))。
分時(shí)操作系統(tǒng)到現(xiàn)在依然存在,并且還十分常見(jiàn),比如許多人去操作同一臺(tái)服務(wù)器。
這時(shí)候大家就在考慮,你丫鍵盤(pán)鼠標(biāo)顯示器啥都給我了,為啥不再給我一個(gè)主機(jī)呢?這其實(shí)還是受限于當(dāng)時(shí)的成本條件,但是到了如今計(jì)算機(jī)的成本以及體積都下來(lái)后,這些都不是問(wèn)題了。
個(gè)人操作系統(tǒng)的誕生
現(xiàn)在咱們大家都是用的個(gè)人操作系統(tǒng),已經(jīng)挺熟練了吧,這個(gè)玩意兒每個(gè)人都在玩,但是雖然大家不共有一個(gè)CPU了,其實(shí)在系統(tǒng)內(nèi)部依然存在著切換,它就是進(jìn)程或者線程之間的切換。
總結(jié)
以上是生活随笔為你收集整理的python编程理论_Python并发编程理论篇,来看看的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python实例 75,76
- 下一篇: linux设备进入睡眠所需时间,andr