1 回答

TA貢獻(xiàn)1757條經(jīng)驗(yàn) 獲得超8個(gè)贊
1、多進(jìn)程并發(fā)
在傳統(tǒng)UNIX中較常用,針對(duì)每一種單獨(dú)的業(yè)務(wù)邏輯的實(shí)例生成不同的線程進(jìn)行處理。典型的程序?qū)嵗轻槍?duì)TCP的多個(gè)不同的客戶端連接,fork出多個(gè)子進(jìn)程進(jìn)行處理,每一個(gè)客戶端對(duì)應(yīng)一個(gè)單獨(dú)的子進(jìn)程,在子進(jìn)程處理退出后,由父進(jìn)程回收其資源。
優(yōu)點(diǎn):各進(jìn)程間的地址空間相互隔離,不會(huì)因?yàn)槟承┎划?dāng)操作將整個(gè)應(yīng)用搞掛。
業(yè)務(wù)邏輯代碼簡(jiǎn)單清晰,代碼平鋪直敘,沒(méi)有復(fù)雜的異步狀態(tài)邏輯。
缺點(diǎn):如果需要在進(jìn)程間進(jìn)行交互或者共享數(shù)據(jù),需要使用IPC。
2、多線程并發(fā)
在現(xiàn)代操作系統(tǒng)windows、linux中很常用,針對(duì)單獨(dú)的業(yè)務(wù)邏輯的不同的實(shí)例在同一個(gè)進(jìn)程中創(chuàng)建多個(gè)線程進(jìn)行并發(fā)處理。典型的例子是,TCP的多個(gè)客戶端在同一個(gè)進(jìn)程中處理,針對(duì)每個(gè)客戶端都單獨(dú)對(duì)應(yīng)的線程進(jìn)行交互,共享同一個(gè)進(jìn)程的所有資源。
優(yōu)點(diǎn):共享進(jìn)程空間,訪問(wèn)共享數(shù)據(jù)非常容易。
沒(méi)有多的進(jìn)程空間開(kāi)銷(xiāo),線程上下文切換快,調(diào)度效率比多進(jìn)程高。
業(yè)務(wù)邏輯代碼簡(jiǎn)單清晰,代碼平鋪直敘,沒(méi)有復(fù)雜的異步狀態(tài)邏輯。
缺點(diǎn):維護(hù)線程的工作由進(jìn)程內(nèi)部代碼處理,比如線程數(shù)量,增加一定的復(fù)雜性。
線程間共享數(shù)據(jù)的競(jìng)爭(zhēng)關(guān)系復(fù)雜,需要處理同步和死鎖問(wèn)題。
3、IO多路復(fù)用
即在單線程控制多個(gè)異步業(yè)務(wù)邏輯,也就是事件驅(qū)動(dòng)多個(gè)業(yè)務(wù)的狀態(tài)處理,典型的有windows中的消息處理機(jī)制,還有l(wèi)inux中的信號(hào)量處理??梢栽趩我痪€程中,處理多種不同的業(yè)務(wù)邏輯,比如同時(shí)處理用戶輸出,鼠標(biāo)點(diǎn)擊,窗口重繪和網(wǎng)絡(luò)輸入。
優(yōu)點(diǎn):所有業(yè)務(wù)實(shí)例的邏輯在單一線程中處理,排除代碼時(shí)序BUG,理論上不存在競(jìng)爭(zhēng)和死鎖問(wèn)題。
沒(méi)有多的進(jìn)程空間開(kāi)銷(xiāo),也沒(méi)有上下文切換問(wèn)題,CPU利用率高。
共享進(jìn)程空間,訪問(wèn)共享數(shù)據(jù)非常容易。
缺點(diǎn):
線程需要管理多個(gè)不同實(shí)例的狀態(tài)機(jī),并正確處理對(duì)應(yīng)事件導(dǎo)致不同狀態(tài)的遷移。
業(yè)務(wù)種類多的情況下,需要人為代碼控制多種狀態(tài)機(jī)。
并發(fā)點(diǎn)越多造成狀態(tài)越多,管理粒度越細(xì), 業(yè)務(wù)邏輯代碼不是順序的,不容易維護(hù)和理解。
異步狀態(tài)過(guò)多,造成資源管理較為復(fù)雜,容易產(chǎn)生資源泄漏。
- 1 回答
- 0 關(guān)注
- 1042 瀏覽
添加回答
舉報(bào)