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