TCP并發(fā)服務(wù)器---多進(jìn)程和多線程

一個好的服務(wù)器,一般都是并發(fā)服務(wù)器(同一時刻可以響應(yīng)多個客戶端的請求)。并發(fā)服務(wù)器設(shè)計技術(shù)一般有:多進(jìn)程服務(wù)器、多線程服務(wù)器、I/O復(fù)用服務(wù)器等。

1、多進(jìn)程服務(wù)器

多進(jìn)程服務(wù)器是當(dāng)客戶有請求時,服務(wù)器用一個子進(jìn)程來處理客戶請求。父進(jìn)程繼續(xù)等待其它客戶的請求。這種方法的優(yōu)點是當(dāng)客戶有請求時,服務(wù)器能及時處理客戶,特別是在客戶服務(wù)器交互系統(tǒng)中。對于一個 TCP 服務(wù)器,客戶與服務(wù)器的連接可能并不馬上關(guān)閉,可能會等到客戶提交某些數(shù)據(jù)后再關(guān)閉,這段時間服務(wù)器端的進(jìn)程會阻塞,所以這時操作系統(tǒng)可能調(diào)度其它客戶服務(wù)進(jìn)程,這比起循環(huán)服務(wù)器大大提高了服務(wù)性能。

多進(jìn)程并發(fā)服務(wù)器
多客戶端測試
測試結(jié)果

總結(jié):通過為每個客戶端創(chuàng)建?個進(jìn)程的方式, 能夠同時為多個客戶端進(jìn)行服務(wù),當(dāng)客戶端不是特別多的時候, 這種方式還行, 如果有成百上千個, 就不可取了, 因為每次創(chuàng)建進(jìn)程等過程需要消耗較多的資源。

2、多線程服務(wù)器

多線程服務(wù)器與多進(jìn)程服務(wù)器在代碼上十分相似,只需要做出稍微的改動,這里不再贅述。

多線程并發(fā)服務(wù)器
執(zhí)行結(jié)果

3、進(jìn)程與線程的比較

從以上可以看出,多進(jìn)程和多線程都實現(xiàn)了同樣的目的,從表面來看并沒有太大區(qū)別,那么進(jìn)程和線程的區(qū)別究竟表現(xiàn)在哪里呢?

1、進(jìn)程:子進(jìn)程是父進(jìn)程的復(fù)制品,是獲得父進(jìn)程數(shù)據(jù)空間、堆和棧的復(fù)制品;而線程,相對與進(jìn)程而言,線程是一個更加接近執(zhí)行體的概念,它可以與同進(jìn)程的其他線程共享數(shù)據(jù),但擁有自己的棧空間,擁有獨立的執(zhí)行序列。兩者都可以提高程序的并發(fā)度,提高程序運行效率和響應(yīng)時間。

2、線程和進(jìn)程在使用上各有優(yōu)缺點:線程執(zhí)行開銷小,但不利于資源管理和保護(hù);而進(jìn)程正相反。同時,線程適合于在SMP機(jī)器(簡單來講就是平時所說的雙CPU系統(tǒng),是對稱多處理機(jī)中最常見的一種)上運行,而進(jìn)程則可以跨機(jī)器遷移。

3、根本區(qū)別就一點:用多進(jìn)程每個進(jìn)程有自己的地址空間(address space),線程則共享地址空間。所有其它區(qū)別都是由此而來的:a、速度:線程產(chǎn)生的速度快,線程間的通訊快、切換快等,因為他們在同一個地址空間內(nèi);b、資源利用率:線程的資源利用率比較好也是因為他們在同一個地址空間內(nèi);c、同步問題:線程使用公共變量/內(nèi)存時需要使用同步機(jī)制還是因為他們在同一個地址空間內(nèi)。

舉一個比較形象的例子,多進(jìn)程的服務(wù)器就好比是立體的交通系統(tǒng)(立交橋),雖然說建造的時候花費比較大,消耗的資源比較多,但是真要是跑起來不會交通堵塞。但是汽車在上面跑,相互通信就是個很費事兒問題(進(jìn)程間通信比較麻煩);多線程就好比是平面的交通系統(tǒng),造價低,但是很容易交通堵塞,但是也有好處,同步的時候方便。

在網(wǎng)絡(luò)服務(wù)器方面:

單進(jìn)程 < 多進(jìn)程(單線程)< 多進(jìn)程(多線程)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 173,284評論 25 708
  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍(lán)閱讀 42,366評論 11 349
  • 只有非常努力,才能看起來毫不費力!
    JuanCGKL閱讀 172評論 0 0
  • 當(dāng)我匆匆寫下這個題目,我忽然想起了一個叫做小剛的同學(xué),有一次他喝醉了酒,或者也許他根本沒有喝多,但是他用哭泣的聲音...
    楊仲凱律師閱讀 743評論 4 2