io多路復用和多線程的區(qū)別?
1、多進程模型的優(yōu)缺點
(1)優(yōu)點:
1)每個進程互相獨立,不影響主程序的穩(wěn)定性,子進程崩潰沒關系;
2)通過增加CPU,就可以容易擴充性能;
3)可以盡量減少線程加鎖/解鎖的影響,極大提高性能,就算是線程運行的模塊算法效率低也沒關系;
4)每個子進程都有2GB地址空間和相關資源,總體能夠達到的性能上限非常大。
(2)缺點:
1)邏輯控制復雜,需要和主程序交互;
2)需要跨進程邊界,如果有大數(shù)據(jù)量傳送,就不太好,適合小數(shù)據(jù)量傳送、密集運算 ;
3)多進程調(diào)度開銷比較大。
2、多線程模型的優(yōu)缺點
(1)優(yōu)點:
1)無需跨進程邊界;
2)程序邏輯和控制方式簡單;
3)所有線程可以直接共享內(nèi)存和變量等;
4)線程方式消耗的總資源比進程方式好;
(2)缺點:
1)每個線程與主程序共用地址空間,受限于2GB地址空間;
2)線程之間的同步和加鎖控制比較麻煩;
3)一個線程的崩潰可能影響到整個程序的穩(wěn)定性;
4)到達一定的線程數(shù)程度后,即使再增加CPU也無法提高性能,
5)線程能夠提高的總性能有限,而且線程多了之后,線程本身的調(diào)度也是一個麻煩事兒,需要消耗較多的CPU 。
3、I/O多路復用的優(yōu)缺點
(1)優(yōu)點:
1)相比于多線程和多進程,I/O多路復用是在單一進程的上下文中的,當有多個并發(fā)連接請求時,多線程或者多進程模型需要為每個連接創(chuàng)建一個線程或者進程,而這些進程或者線程中大部分是被阻塞起來的。由于CPU的核數(shù)一般都不大,比如4個核要跑1000個線程,那么每個線程的時間槽非常短,而線程切換非常頻繁。這樣是有問題的。而使用I/O多路復用時,處理多個連接只需要1個線程監(jiān)控就緒狀態(tài),對就緒的每個連接開一個線程處理(由線程池支持)就可以了,這樣需要的線程數(shù)大大減少,減少了內(nèi)存開銷和上下文切換的CPU開銷。
2)整個過程只在調(diào)用select、poll、epoll這些調(diào)用的時候才會阻塞,收發(fā)客戶消息是不會阻塞的,整個進程或者線程就被充分利用起來,這就是事件驅動。
(2)缺點:
單線程模型不能有阻塞,一旦發(fā)生任何阻塞(包括計算機計算延遲)都會使得這個模型不如多線程。另外,單線程模型不能很好的利用多核cpu。