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

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