淺談并發(fā)
瀏覽量:2450
一、并發(fā)的定義
在操作系統(tǒng)中,是指一個(gè)時(shí)間段中有幾個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間,且這幾個(gè)程序都是在同一個(gè)處理機(jī)上運(yùn)行,但是任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)上運(yùn)行。并發(fā)環(huán)境下,由于程序的封閉性被打破,出現(xiàn)了新的特點(diǎn):
- 程序與計(jì)算不再一一對(duì)應(yīng),一個(gè)程序副本可以有多個(gè)計(jì)算;
- 并發(fā)程序之間有相互制約關(guān)系:直接制約體現(xiàn)為一個(gè)程序需要另一個(gè)程序的計(jì)算結(jié)果,間接制約體現(xiàn)為多個(gè)程序競(jìng)爭(zhēng)某一資源,如處理機(jī)、緩沖區(qū)等;
- 并發(fā)程序在執(zhí)行中是走走停停,斷續(xù)推進(jìn)的。
二、和并行的區(qū)別與聯(lián)系
并發(fā)性(Concurrence):指兩個(gè)或兩個(gè)以上的事件或活動(dòng)在同一時(shí)間間隔內(nèi)發(fā)生。
并行性(Parallelism):指兩個(gè)或兩個(gè)以上事件或活動(dòng)在同一時(shí)刻發(fā)生。
1)兩者的區(qū)別
并發(fā)和并行的區(qū)別就是一個(gè)處理器同時(shí)處理多個(gè)任務(wù)和多個(gè)處理器(或者是多核的處理器)同時(shí)處理多個(gè)不同的任務(wù)。前者是邏輯上的同時(shí)發(fā)生,而后者是物理上的同時(shí)發(fā)生。


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

