進程和線程的關係:
(1)一個線程只能屬於一個進程,而一個進程能夠有多個線程,但至少有一個線程。
(2)資源分配給進程,同一進程的全部線程共享該進程的全部資源。
(3)線程在執行過程當中,須要協做同步。不一樣進程的線程間要利用消息通訊的辦法實現同步。
(4)線程是指進程內的一個執行單元,也是進程內的可調度實體。
線程與進程的區別:
(1)線程做爲調度和分配的基本單位,進程做爲擁有資源的基本單位。
(2)系統在運行的時候會爲每一個進程分配不一樣的內存空間;而對線程而言,除了CPU外,系統不會爲線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
(3)在操做系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(經過CPU調度,在每一個時間片中只有一個線程執行)
(4)每一個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程能夠看作輕量級的進程,同一類線程共享代碼和數據空間,每一個線程都有本身獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。
線程調度:按照特定機制爲多個線程分配CPU的使用權。
有兩種調度模型:
分時調度:全部線程平分cpu的時間片,輪流佔用CPU
搶佔式調度:根據優先級佔用CPU
調度算法:根據系統的資源分配策略所規定的資源分配算法
(1)時間片輪轉法
在早期的時間片輪轉法中,系統將全部的就緒進程按先來先服務的原則排成一個隊列,每次調度時,把CPU 分配給隊首進程,並令其執行一個時間片。時間片的大小從幾ms 到幾百ms。當執行的時間片用完時,由一個計時器發出時鐘中斷請求,調度程序便據此信號來中止該進程的執行,並將它送往就緒隊列的末尾;而後,再把處理機分配給就緒隊列中新的隊首進程,同時也讓它執行一個時間片。這樣就能夠保證就緒隊列中的全部進程在一給定的時間內均能得到一時間片的處理機執行時間。換言之,系統能在給定的時間內響應全部用戶的請求。
(2)高響應比優先調度算法
在批處理系統中,短做業優先算法是一種比較好的算法,其主要的不足之處是長做業的運行得不到保證。若是咱們能爲每一個做業引入前面所述的動態優先權,並使做業的優先級隨着等待時間的增長而以速率a 提升,則長做業在等待必定的時間後,必然有機會分配處處理機。該優先權的變化規律可描述爲:
響應比=(等待時間+服務時間)/服務時間
根據公式可知:
看成業的等待時間相同時,則要求服務時間越短,其響應比越高,有利於短做業。
當要求服務時間相同時,做業的響應比由其等待時間決定,等待時間越長,其響應比越高,於是它實現的是先來先服務。
對於長做業,做業的響應比能夠隨等待時間的增長而提升,當其等待時間足夠長時,其響應比即可升到很高,從而也可得到處理機。克服了飢餓狀態,兼顧了長做業。
(3)先來先服務算法
先來先服務(FCFS)調度算法是一種最簡單的調度算法,該算法既可用於做業調度,也可用於進程調度。當在做業調度中採用該算法時,每次調度都是從後備做業隊列中選擇一個或多個最早進入該隊列的做業,將它們調入內存,爲它們分配資源、建立進程,而後放入就緒隊列。在進程調度中採用FCFS算法時,則每次調度是從就緒隊列中選擇一個最早進入該隊列的進程,爲之分配處理機,使之投入運行。該進程一直運行到完成或發生某事件而阻塞後才放棄處理機。
(4)最短優先調度算法
最短優先調度算法是指對短做業或短進程優先調度的算法。它們能夠分別用於做業調度和進程調度。短做業優先(SJF)的調度算法是從後備隊列中選擇一個或若干個估計運行時間最短的做業,將它們調入內存運行。而短進程優先(SPF)調度算法則是從就緒隊列中選出一個估計運行時間最短的進程,將處理機分配給它,使它當即執行並一直執行到完成,或發生某事件而被阻塞放棄處理機時再從新調度。
(1)管道(Pipe)
管道包括三種:
①普通管道PIPE: 一般有兩種限制,一是單工,只能單向傳輸;二是隻能在父子或者兄弟進程間使用.
②流管道s_pipe: 去除了第一種限制,爲半雙工,只能在父子或兄弟進程間使用,能夠雙向傳輸.
③命名管道:name_pipe:去除了第二種限制,能夠在許多並不相關的進程之間進行通信.
(2)消息隊列( message queue )
①消息隊列能夠認爲是一個全局的一個鏈表,鏈表節點鐘存放着數據報的類型和內容,有消息隊列的標識符進行標記。
②消息隊列容許一個或多個進程寫入或者讀取消息。
③消息隊列的生命週期隨內核。
④消息隊列可實現雙向通訊。
(3)共享內存( shared memory )
共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。共享內存是最快的 IPC 方式,它是針對其餘進程間通訊方式運行效率低而專門設計的。它每每與其餘通訊機制,如信號兩兩配合使用,來實現進程間的同步和通訊。
(4)信號 ( sinal )
信號是一種比較複雜的通訊方式,用於通知接收進程某個事件已經發生。
(5)套接字( socket )
套接字也是一種進程間通訊機制,與其餘通訊機制不一樣的是,它可用於不一樣機器間的進程通訊。
(6)信號量( semophore )
信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問。它常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。所以,主要做爲進程間以及同一進程內不一樣線程之間的同步手段。
協程是一種用戶態的輕量級線程,即協程是由用戶程序本身控制調度的。
從編程角度上看,協程的思想本質上就是控制流的主動讓出(yield)和恢復(resume)機制。yield讓協程暫停,和線程的阻塞是有本質區別的。協程的暫停徹底由程序控制,線程的阻塞狀態是由操做系統內核來進行切換。所以,開銷更小。
缺點:
1.協程的本質是單線程下,沒法利用多核,能夠是一個程序開啓多個進程,每一個進程內開啓多個線程,每一個線程內開啓協程。
2.協程指的是單個線程,於是一旦協程出現阻塞,將會阻塞整個線程。
1. awk
awk是行處理器,是以文件的一行內容爲處理單位的。awk讀取一行內容,而後根據指定條件判斷是否處理此行內容,若此行文本符合條件,則按照動做處理文本,不然跳過此行文本,讀取下一行進行判斷。
awk 'condition { action }' filename 處理指定文件的內容
command | awk ' condition { action }' 處理某個命令的執行結果
注:condition:條件。若此行文本符合該條件,則按照 action 處理此行文本。不添加條件時則處理每一行文本;
action:動做。按照動做處理符合要求的內容。通常用於打印指定的內容信息;
2. top
top命令是Linux下經常使用的性能分析工具,可以實時顯示系統中各個進程的資源佔用情況,相似於Windows的任務管理器。
3. netstat
查看本機開啓端口號
4. grep
用於查找文件裏符合條件的字符串。
grep "被查找的字符串" 文件名 從文件內容查找匹配指定字符串的行
grep –e "正則表達式" 文件名 從文件內容查找與正則表達式匹配的行
5. less
對文件或其它輸出進行分頁顯示的工具
6. tail
用於查看文件的內容,有一個經常使用的參數 -f 經常使用於查閱正在改變的日誌文件
r:表明權限是可讀,r也能夠用數字4表示正則表達式
w:表明權限是可寫,w也能夠用數字2表示算法
x:表明權限是可執行,x也能夠用數字1表示編程
chmod u=rwx,g=rw,o=r aaa.txt 等價於 chmod 764 aaa.txtless