(現(xiàn)在人工智能非?;鸨芏嗯笥讯枷雽W(xué),但是一般的教程都是為博碩生準(zhǔn)備的,太難看懂了。最近發(fā)現(xiàn)了一個(gè)非常適合小白入門的教程,不僅通俗易懂而且還很風(fēng)趣幽默。所以忍不住分享一下給大家。
? 點(diǎn)這里https://www.cbedai.net/ialexanderi可以跳轉(zhuǎn)到教程。)
?
-
進(jìn)程
- 簡(jiǎn)介
- 使用場(chǎng)景
-
線程
- 簡(jiǎn)介
- 使用場(chǎng)景
-
協(xié)程
- 簡(jiǎn)介
- 使用場(chǎng)景
- 進(jìn)程與線程之間的關(guān)系
?
背景:競(jìng)爭(zhēng)上崗已工作半個(gè)月,老大給的第一個(gè)任務(wù)是讓我理解線程、進(jìn)程、協(xié)程的概念和使用場(chǎng)景,不忘初心,來(lái)波分享
進(jìn)程
簡(jiǎn)介
一個(gè)運(yùn)行的程序或代碼就是一個(gè)進(jìn)程,一個(gè)沒(méi)有運(yùn)行的代碼叫程序。進(jìn)程是系統(tǒng)進(jìn)行資源分配的最小單位,進(jìn)程擁有自己的內(nèi)存空間,進(jìn)程之間相互獨(dú)立,所以進(jìn)程間數(shù)據(jù)不共享,開(kāi)銷大,同一個(gè)進(jìn)程中的所有線程共享資源
使用場(chǎng)景
多進(jìn)程適合在
CPU 密集
型操作(cpu 操作指令比較多,計(jì)算密集型,如科學(xué)計(jì)算,位數(shù)多的浮點(diǎn)運(yùn)算)
計(jì)算密集型任務(wù)的特點(diǎn)是要進(jìn)行大量的計(jì)算,消耗CPU資源,比如計(jì)算圓周率、對(duì)視頻進(jìn)行高清解碼等等,全靠CPU的運(yùn)算能力。這種計(jì)算密集型任務(wù)雖然也可以用多任務(wù)完成,但是任務(wù)越多,花在任務(wù)切換的時(shí)間就越多,CPU執(zhí)行任務(wù)的效率就越低,所以,要最高效地利用CPU,計(jì)算密集型任務(wù)同時(shí)進(jìn)行的數(shù)量應(yīng)當(dāng)?shù)扔贑PU的核心數(shù)。
計(jì)算密集型任務(wù)由于主要消耗CPU資源,因此,代碼運(yùn)行效率至關(guān)重要。Python這樣的腳本語(yǔ)言運(yùn)行效率很低,完全不適合計(jì)算密集型任務(wù)。對(duì)于計(jì)算密集型任務(wù),最好用C語(yǔ)言編寫。
線程
簡(jiǎn)介
調(diào)度執(zhí)行的最小單位,也叫執(zhí)行路徑,不能獨(dú)立存在,依賴進(jìn)程的存在而存在,一個(gè)進(jìn)程至少有一個(gè)線程,叫主線程,多個(gè)線程共享內(nèi)存(數(shù)據(jù)共享和全局變量),因此提升程序的運(yùn)行效率。
使用場(chǎng)景
多線程適合在
IO 密集
型操作
(讀寫數(shù)據(jù)操作較多的,比如爬蟲(chóng))
IO密集型,涉及到網(wǎng)絡(luò)、磁盤IO的任務(wù)都是IO密集型任務(wù),這類任務(wù)的特點(diǎn)是CPU消耗很少,任務(wù)的大部分時(shí)間都在等待IO操作完成(因?yàn)镮O的速度遠(yuǎn)遠(yuǎn)低于CPU和內(nèi)存的速度)。對(duì)于IO密集型任務(wù),任務(wù)越多,CPU效率越高,但也有一個(gè)限度。常見(jiàn)的大部分任務(wù)都是IO密集型任務(wù),比如Web應(yīng)用。
IO密集型任務(wù)執(zhí)行期間,99%的時(shí)間都花在IO上,花在CPU上的時(shí)間很少,
因此,用運(yùn)行速度極快的C語(yǔ)言替換用Python這樣運(yùn)行速度極低的腳本語(yǔ)言,完全無(wú)法提升運(yùn)行效率。對(duì)于IO密集型任務(wù),最合適的語(yǔ)言就是開(kāi)發(fā)效率最高(代碼量最少)的語(yǔ)言,腳本語(yǔ)言是首選,C語(yǔ)言最差。
協(xié)程
簡(jiǎn)介
用戶態(tài)的輕量級(jí)線程,調(diào)度有用戶控制,擁有自己的寄存器上下文和棧,切換基本沒(méi)有內(nèi)核切換的開(kāi)銷,切換靈活。
使用場(chǎng)景
Python中的多線程是假的多線程,協(xié)程+線程=真的多線程
進(jìn)程與線程之間的關(guān)系
線程是并發(fā),進(jìn)程是并行;
線程是屬于進(jìn)程的,線程運(yùn)行在進(jìn)程空間內(nèi),同一進(jìn)程所產(chǎn)生的線程共享同一內(nèi)存空間,當(dāng)進(jìn)程退出時(shí)該進(jìn)程所產(chǎn)生的線程都會(huì)被強(qiáng)制退出并清除。
線程可與屬于同一進(jìn)程的其它線程共享進(jìn)程所擁有的全部資源,但是其本身基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的信息(如程序計(jì)數(shù)器、一組寄存器和棧)。
參考文章
python進(jìn)程、線程、協(xié)程
python進(jìn)程,線程,協(xié)程,鎖等十二個(gè)面試問(wèn)題
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
