Linux小知識分享(一) 標簽(空格分隔): 陳思齊 1,多進程與多線程 1.1 什麼是進程? 程式並不能單獨運行,只有將程式裝載到記憶體中,系統為它分配資源才能運行,而這種承載程式運行的資源池(指令集合)就稱之為進程。 1.2什麼是多進程? 在多道編程中,我們允許多個程式同時載入到記憶體中,在操作系 ...
Linux小知識分享(一)
標簽(空格分隔): 陳思齊
1,多進程與多線程
1.1 什麼是進程?
程式並不能單獨運行,只有將程式裝載到記憶體中,系統為它分配資源才能運行,而這種承載程式運行的資源池(指令集合)就稱之為進程。
[root@chensiqi1 ~]# ls /proc/ | grep "[1-9]" | xargs
1 10 1046 11 1107 1127 1139 114 1154 1156 1158 1160 1162 1163 1165 12 13 1337 1341 14 15 16 17 18 19 2 20 21 22 23 24 25 251 253 259 26 260 261 27 28 29 3 30 33 34 35 36 37 38 397 398 4 45 46 48 49 497 5 50 6 627 7 8 815 816 82 83 851 8517 8541 9 9314 9315 9319 9335 9336 9337
說明:
/proc:虛擬目錄(只存在記憶體當中)臨時生成的。
當系統生成了一個新的進程,就會臨時在記憶體中生成一個用於承載程式運行的資源池(指令集)如上邊的那些數字(pid號)
1.2什麼是多進程?
在多道編程中,我們允許多個程式同時載入到記憶體中,在操作系統的調度下,可以實現併發地執行。就是這樣的設計,大大提高了CPU的利用率。進程的出現讓每個用戶感覺到自己獨享CPU,因此,進程就是為了在CPU上實現多道編程而提出的。
1.3 什麼是線程?
線程是操作系統能夠進行運算調度的最小單位。它被包含在進程之中,是進程中的實際運作單位。
1.4 什麼是多線程?
一個進程中可以併發多個線程,每條線程並行執行不同的任務
2,同步IO與非同步IO
2.1 同步,非同步IO原理圖
2.2 同步IO與非同步IO對linux的資源回收機制的影響
2.2.1同步IO影響下的Linux垃圾回收機制原理圖
2.2.2非同步IO影響下的Linux垃圾回收機制原理圖
3,Linux下的僵屍進程
3.1 什麼是僵屍進程及產生原因
在UNIX(Linux) 系統中,一個進程結束了,但是他的父進程沒有等待(調用wait / waitpid)他, 那麼他將變成一個僵屍進程。 但是如果該進程的父進程已經先結束了,那麼該進程就不會變成僵屍進程, 因為每個進程結束的時候,系統都會掃描當前系統中所運行的所有進程, 看有沒有哪個進程是剛剛結束的這個進程的子進程,如果是的話,就由Init 來接管他,成為他的父進程……
- 父進程先結束,子進程未結束,由init代為垃圾回收,不會產生僵屍進程
- 父進程未結束,子進程先結束,但是父進程未調用wait函數,導致子進程變成僵屍進程。
3.2 僵屍進程的危害
- 僵屍進程占用的記憶體資源雖少但不會被釋放
- 僵屍進程占用的pid號不會被釋放
3.3 僵屍進程的處理方式
查看僵屍進程
[root@chensiqi1 ~]# ps -ef -o pid,ppid,stat
PID PPID STAT
9319 9315 Ss
9888 9319 R+
1341 1337 Ss+
1165 1 Ss+
1162 1 Ss+
1158 1 Ss+
1156 1 Ss+
1154 1 Ss+
說明:
僵屍進程的STAT狀態為Zz
查找出僵屍進程後通過命令殺掉即可。(本人只瞭解到這裡,若有其他問題,請繼續鑽研)
4,Python對比Shell的核心優勢在哪?(個人理解)
Python擁有多進程和多線程的模式,也就是說Python程式同一時間可以大併發的做很多事情,而Shell是單線程或單進程的。
5,Python到底能不能取代Shell?(個人理解)
不能取代,雖然Shell所寫的腳本python均能實現,但是沒有人會這麼去做,因為利用Shell寫linux腳本非常的簡單方便,即便Shell腳本的執行速度只有python寫的腳本的1/8左右(一個做CDN方向python運維開發的人告訴我的),但是對伺服器的批量部署或者維護來說,伺服器並不差那點時間,對於執行速度上並無特殊需求(或許大數據運維會有例外),同時python可以通過一些手段來加速shell腳本的執行速率。因此,目前來看完全沒必要全部用python來寫運維腳本。