淺談并發(fā)
瀏覽量:2404
一、并發(fā)的定義
在操作系統(tǒng)中,是指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行,但是任一個時刻點上只有一個程序在處理機上運行。并發(fā)環(huán)境下,由于程序的封閉性被打破,出現(xiàn)了新的特點:
- 程序與計算不再一一對應,一個程序副本可以有多個計算;
- 并發(fā)程序之間有相互制約關(guān)系:直接制約體現(xiàn)為一個程序需要另一個程序的計算結(jié)果,間接制約體現(xiàn)為多個程序競爭某一資源,如處理機、緩沖區(qū)等;
- 并發(fā)程序在執(zhí)行中是走走停停,斷續(xù)推進的。
二、和并行的區(qū)別與聯(lián)系
并發(fā)性(Concurrence):指兩個或兩個以上的事件或活動在同一時間間隔內(nèi)發(fā)生。
并行性(Parallelism):指兩個或兩個以上事件或活動在同一時刻發(fā)生。
1)兩者的區(qū)別
并發(fā)和并行的區(qū)別就是一個處理器同時處理多個任務和多個處理器(或者是多核的處理器)同時處理多個不同的任務。前者是邏輯上的同時發(fā)生,而后者是物理上的同時發(fā)生。
2)兩者的聯(lián)系
并行的事件或活動一定是并發(fā)的,但反之并發(fā)的事件或活動未必是并行的。
并行性是并發(fā)性的特例,而并發(fā)性是并行性的擴展。
三、表現(xiàn)形式
1)多進程并發(fā)
當客戶有請求時,服務器用一個子進程來處理客戶請求,父進程繼續(xù)等待其它客戶的請求。這種方法的優(yōu)點是當客戶有請求時,服務器能及時處理客戶,特別是在客戶服務器交互系統(tǒng)中。對于一個TCP 服務器,客戶與服務器的連接可能并不馬上關(guān)閉,可能會等到客戶提交某些數(shù)據(jù)后再關(guān)閉,這段時間服務器端的進程會阻塞,所以這時操作系統(tǒng)可能調(diào)度其它客戶服務進程。
2)多線程并發(fā)
多線程并發(fā)是對多進程并發(fā)的改進,由于多進程并發(fā)服務器在創(chuàng)建進程時要消耗較多的系統(tǒng)資源,所以用線程來取代進程,這樣服務處理程序可以較快的創(chuàng)建(據(jù)統(tǒng)計,創(chuàng)建線程比創(chuàng)建進程要快10100 倍,所以又把線程稱為“輕量級”進程)。
3)I/O復用并發(fā)
I/O復用技術(shù)是為了解決進程或線程阻塞到某個I/O系統(tǒng)調(diào)用而出現(xiàn)的技術(shù),使進程不阻塞于某個特定的I/O系統(tǒng)調(diào)用。它也可用于并發(fā)服務器的設(shè)計,但很多情況下它是與多線程和多進程一起使用。
這種方法的優(yōu)點是:由于只有一個進程或線程,系統(tǒng)資消耗較小。缺點是要處理完一個客戶后,才能處理其它客戶的請求,而且處理客戶請求時,不能讓它阻塞到其它的I/O系統(tǒng)調(diào)用上,否則就成了一種迭代服務器。對于某些處理客戶請求的時間較短、實時性要求不是很高的網(wǎng)絡(luò)服務器,I/O復用可以較好的應用。
I/O復用能讓一個或多個I/O條件滿足(例如,輸入已經(jīng)準備好被讀,或者描述字可以承接更多的輸出)時,我們就被通知到。I/O復用由select和poll支持,較新的Posix.1g也支持(pselect)。I/O復用技術(shù)的應用面十分廣泛,總結(jié)一下主要有以下幾方面:
- 客戶程序需要同時處理交互式的輸入以及與服務器之間的網(wǎng)絡(luò)連接。
- 客戶端需要同時對多個網(wǎng)絡(luò)連接作出反應。
- TCP服務器需要同時處理處于監(jiān)聽狀態(tài)和多個連接狀態(tài)的套接字。
- 服務器需要處理多個網(wǎng)絡(luò)協(xié)議套接字。
- 服務器需要同時處理不同的網(wǎng)絡(luò)服務和協(xié)議。