Linux下多线程和多进程程序的优缺点,各个适合什么样的业务场景 多线程和多进程的程序各有什么优缺点,分别用在什么场合

Linux \u4e0b\u591a\u7ebf\u7a0b\u548c\u591a\u8fdb\u7a0b\u7a0b\u5e8f\u7684\u4f18\u7f3a\u70b9\uff0c\u5404\u81ea\u9002\u5408\u4ec0\u4e48\u6837\u7684\u4e1a\u52a1\u573a\u666f

Linux \u4e0b\u591a\u7ebf\u7a0b\u548c\u591a\u8fdb\u7a0b\u7a0b\u5e8f\u7684\u4f18\u7f3a\u70b9\uff0c\u5404\u81ea\u9002\u5408\u4ec0\u4e48\u6837\u7684\u4e1a\u52a1\u573a\u666f
\u3000\u3000IBM\u6709\u4e2a\u5bb6\u4f19\u505a\u4e86\u4e2a\u6d4b\u8bd5\uff0c\u53d1\u73b0\u5207\u6362\u7ebf\u7a0bcontext\u7684\u65f6\u5019\uff0cwindows\u6bd4linux\u5feb\u4e00\u500d\u591a\u3002\u8fdb\u51fa\u6700\u5feb\u7684\u9501\uff08windows2k\u7684 critical section\u548clinux\u7684pthread_mutex\uff09\uff0cwindows\u6bd4linux\u7684\u8981\u5feb\u4e94\u500d\u5de6\u53f3\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u662f\u8bf4linux\u4e0d\u597d\uff0c\u800c\u4e14\u5728\u7ecf\u8fc7\u5b9e\u9645\u7f16\u7a0b\u4e4b\u540e\uff0c\u7efc\u5408\u6765\u770b\u6211\u89c9\u5f97linux\u66f4\u9002\u5408\u505ahigh performance server\uff0c\u4e0d\u8fc7\u5728\u591a\u7ebf\u7a0b\u8fd9\u4e2a\u5177\u4f53\u7684\u9886\u57df\u5185\uff0clinux\u8fd8\u662f\u7a0d\u900awindows\u4e00\u70b9\u3002\u8fd9\u5e94\u8be5\u662f\u60c5\u6709\u53ef\u539f\u7684\uff0c\u6bd5\u7adfunix\u5bb6\u65cf\u90fd\u662f\u4ece\u591a\u8fdb\u7a0b\u8fc7\u6765\u7684\uff0c\u800c windows\u4ece\u5934\u5c31\u662f\u591a\u7ebf\u7a0b\u7684\u3002
\u3000\u3000\u5982\u679c\u662fUNIX/linux\u73af\u5883\uff0c\u91c7\u7528\u591a\u7ebf\u7a0b\u6ca1\u5fc5\u8981\u3002
\u3000\u3000\u591a\u7ebf\u7a0b\u6bd4\u591a\u8fdb\u7a0b\u6027\u80fd\u9ad8\uff1f\u8bef\u5bfc\uff01
\u3000\u3000\u5e94\u8be5\u8bf4\uff0c\u591a\u7ebf\u7a0b\u6bd4\u591a\u8fdb\u7a0b\u6210\u672c\u4f4e\uff0c\u4f46\u6027\u80fd\u66f4\u4f4e\u3002
\u3000\u3000\u5728UNIX\u73af\u5883\uff0c\u591a\u8fdb\u7a0b\u8c03\u5ea6\u5f00\u9500\u6bd4\u591a\u7ebf\u7a0b\u8c03\u5ea6\u5f00\u9500\uff0c\u6ca1\u6709\u663e\u8457\u533a\u522b\uff0c\u5c31\u662f\u8bf4\uff0cUNIX\u8fdb\u7a0b\u8c03\u5ea6\u6548\u7387\u662f\u5f88\u9ad8\u7684\u3002\u5185\u5b58\u6d88\u8017\u65b9\u9762\uff0c\u4e8c\u8005\u53ea\u5dee\u5168\u5c40\u6570\u636e\u533a\uff0c\u73b0\u5728\u5185\u5b58\u90fd\u5f88\u4fbf\u5b9c\uff0c\u670d\u52a1\u5668\u5185\u5b58\u52a8\u8f84\u82e5\u5e72G\uff0c\u6839\u672c\u4e0d\u662f\u95ee\u9898\u3002
\u3000\u3000\u591a\u8fdb\u7a0b\u662f\u7acb\u4f53\u4ea4\u901a\u7cfb\u7edf\uff0c\u867d\u7136\u9020\u4ef7\u9ad8\uff0c\u4e0a\u5761\u4e0b\u5761\u591a\u8017\u70b9\u6cb9\uff0c\u4f46\u662f\u4e0d\u5835\u8f66\u3002
\u3000\u3000\u591a\u7ebf\u7a0b\u662f\u5e73\u9762\u4ea4\u901a\u7cfb\u7edf\uff0c\u9020\u4ef7\u4f4e\uff0c\u4f46\u7ea2\u7eff\u706f\u592a\u591a\uff0c\u8001\u5835\u8f66\u3002
\u3000\u3000\u6211\u4eec\u73b0\u5728\u90fd\u5f00\u8dd1\u8f66\uff0c\u6cb9\uff08\u4e3b\u9891\uff09\u6709\u7684\u662f\uff0c\u4e0d\u6015\u4e0a\u5761\u4e0b\u5761\uff0c\u5c31\u6015\u5835\u8f66\u3002
\u3000\u3000\u9ad8\u6027\u80fd\u4ea4\u6613\u670d\u52a1\u5668\u4e2d\u95f4\u4ef6\uff0c\u5982TUXEDO\uff0c\u90fd\u662f\u4e3b\u5f20\u591a\u8fdb\u7a0b\u7684\u3002\u5b9e\u9645\u6d4b\u8bd5\u8868\u660e\uff0cTUXEDO\u6027\u80fd\u548c\u5e76\u53d1\u6548\u7387\u662f\u975e\u5e38\u9ad8\u7684\u3002TUXEDO\u662f\u8d1d\u5c14\u5b9e\u9a8c\u5ba4\u7684\uff0c\u4e0eUNIX\u540c\u5b97\uff0c\u5e94\u8be5\u662f\u5bf9UNIX\u7406\u89e3\u6700\u4e3a\u6df1\u523b\u7684\uff0c\u4ed6\u4eec\u7684\u610f\u89c1\u5e94\u8be5\u5177\u6709\u5f88\u5927\u7684\u53c2\u8003\u610f\u4e49\u3002

\uff08windows2k\u7684 critical section\u548clinux\u7684pthread_mutex\uff09\uff0cwindows\u6bd4linux\u7684\u8981\u5feb\u4e94\u500d\u5de6\u53f3\u3002\u5f53\u7136\u8fd9\u5e76\u4e0d\u662f\u8bf4linux\u4e0d\u597d\uff0c\u800c\u4e14\u5728\u7ecf\u8fc7\u5b9e\u9645\u7f16\u7a0b\u4e4b\u540e\uff0c\u7efc\u5408\u6765\u770b\u6211\u89c9\u5f97linux\u66f4\u9002\u5408\u505ahigh performance server\uff0c\u4e0d\u8fc7\u5728\u591a\u7ebf\u7a0b\u8fd9\u4e2a\u5177\u4f53\u7684\u9886\u57df\u5185\uff0clinux\u8fd8\u662f\u7a0d\u900awindows\u4e00\u70b9\u3002\u8fd9\u5e94\u8be5\u662f\u60c5\u6709\u53ef\u539f\u7684\uff0c\u6bd5\u7adfunix\u5bb6\u65cf\u90fd\u662f\u4ece\u591a\u8fdb\u7a0b\u8fc7\u6765\u7684\uff0c\u800c windows\u4ece\u5934\u5c31\u662f\u591a\u7ebf\u7a0b\u7684\u3002
\u3000\u3000\u5982\u679c\u662fUNIX/linux\u73af\u5883\uff0c\u91c7\u7528\u591a\u7ebf\u7a0b\u6ca1\u5fc5\u8981\u3002
\u3000\u3000\u591a\u7ebf\u7a0b\u6bd4\u591a\u8fdb\u7a0b\u6027\u80fd\u9ad8\uff1f\u8bef\u5bfc\uff01
\u3000\u3000\u5e94\u8be5\u8bf4\uff0c\u591a\u7ebf\u7a0b\u6bd4\u591a\u8fdb\u7a0b\u6210\u672c\u4f4e\uff0c\u4f46\u6027\u80fd\u66f4\u4f4e\u3002
\u3000\u3000\u5728UNIX\u73af\u5883\uff0c\u591a\u8fdb\u7a0b\u8c03\u5ea6\u5f00\u9500\u6bd4\u591a\u7ebf\u7a0b\u8c03\u5ea6\u5f00\u9500\uff0c\u6ca1\u6709\u663e\u8457\u533a\u522b\uff0c\u5c31\u662f\u8bf4\uff0cUNIX\u8fdb\u7a0b\u8c03\u5ea6\u6548\u7387\u662f\u5f88\u9ad8\u7684\u3002\u5185\u5b58\u6d88\u8017\u65b9\u9762\uff0c

  IBM有个家伙做了个测试,发现切换线程context的时候,windows比linux快一倍多。进出最快的锁(windows2k的 critical section和linux的pthread_mutex),windows比linux的要快五倍左右。当然这并不是说linux不好,而且在经过实际编程之后,综合来看我觉得linux更适合做high performance server,不过在多线程这个具体的领域内,linux还是稍逊windows一点。这应该是情有可原的,毕竟unix家族都是从多进程过来的,而 windows从头就是多线程的。
  如果是UNIX/linux环境,采用多线程没必要。
  多线程比多进程性能高?误导!
  应该说,多线程比多进程成本低,但性能更低。
  在UNIX环境,多进程调度开销比多线程调度开销,没有显著区别,就是说,UNIX进程调度效率是很高的。内存消耗方面,二者只差全局数据区,现在内存都很便宜,服务器内存动辄若干G,根本不是问题。
  多进程是立体交通系统,虽然造价高,上坡下坡多耗点油,但是不堵车。
  多线程是平面交通系统,造价低,但红绿灯太多,老堵车。
  我们现在都开跑车,油(主频)有的是,不怕上坡下坡,就怕堵车。
  高性能交易服务器中间件,如TUXEDO,都是主张多进程的。实际测试表明,TUXEDO性能和并发效率是非常高的。TUXEDO是贝尔实验室的,与UNIX同宗,应该是对UNIX理解最为深刻的,他们的意见应该具有很大的参考意义。

  多线程的优点:
  无需跨进程边界;
程序逻辑和控制方式简单;
所有线程可以直接共享内存和变量等;
线程方式消耗的总资源比进程方式好;
多线程缺点:
  每个线程与主程序共用地址空间,受限于2GB地址空间;
线程之间的同步和加锁控制比较麻烦;
一个线程的崩溃可能影响到整个程序的稳定性;
到达一定的线程数程度后,即使再增加CPU也无法提高性能,例如Windows Server 2003,大约是1500个左右的线程数就快到极限了(线程堆栈设定为1M),如果设定线程堆栈为2M,还达不到1500个线程总数;
线程能够提高的总性能有限,而且线程多了之后,线程本身的调度也是一个麻烦事儿,需要消耗较多的CPU
  
  多进程优点:
  每个进程互相独立,不影响主程序的稳定性,子进程崩溃没关系;
通过增加CPU,就可以容易扩充性能;
可以尽量减少线程加锁/解锁的影响,极大提高性能,就算是线程运行的模块算法效率低也没关系;
每个子进程都有2GB地址空间和相关资源,总体能够达到的性能上限非常大
多线程缺点:
  逻辑控制复杂,需要和主程序交互;
需要跨进程边界,如果有大数据量传送,就不太好,适合小数据量传送、密集运算
多进程调度开销比较大;
最好是多进程和多线程结合,即根据实际的需要,每个CPU开启一个子进程,这个子进程开启多线程可以为若干同类型的数据进行处理。当然你也可以利用多线程+多CPU+轮询方式来解决问题……
  方法和手段是多样的,关键是自己看起来实现方便有能够满足要求,代价也合适。
  

  • 鍦Linux绯荤粺涓澶氳繘绋嬬▼搴缁撴瀯鍜屽绾跨▼缁撴瀯閭d釜濂?
    绛旓細澶氳繘绋嬬▼搴缁撴瀯鍜屽绾跨▼绋嬪簭缁撴瀯鏈夊緢澶鐨涓嶅悓锛屽绾跨▼绋嬪簭缁撴瀯鐩稿浜庡杩涚▼绋嬪簭缁撴瀯鏈変互涓嬬殑浼樺娍锛1銆佹柟渚跨殑閫氫俊鍜屾暟鎹氦鎹 绾跨▼闂存湁鏂逛究鐨勯氫俊鍜屾暟鎹氦鎹㈡満鍒躲傚涓嶅悓杩涚▼鏉ヨ锛屽畠浠叿鏈夌嫭绔嬬殑鏁版嵁绌洪棿锛岃杩涜鏁版嵁鐨勪紶閫掑彧鑳介氳繃閫氫俊鐨勬柟寮忚繘琛岋紝杩欑鏂瑰紡涓嶄粎璐规椂锛岃屼笖寰堜笉鏂逛究銆傜嚎绋嬪垯涓嶇劧锛岀敱浜庡悓涓杩涚▼...
  • Linux涓嬪绾跨▼鍜屽杩涚▼绋嬪簭鐨勪紭缂虹偣,鍚勪釜閫傚悎浠涔堟牱鐨勪笟鍔″満鏅痏鐧惧害鐭 ...
    绛旓細澶氳繘绋姣旇緝瀹夊叏锛屽洜涓洪粯璁ゆ儏鍐典笅涓嶅悓杩涚▼涔嬮棿鐨鍐呭瓨鏄嫭绔嬬殑锛堝鏋滈渶瑕佸叡浜唴瀛樺垯闇瑕佽繘琛岃繘绋嬮棿閫氫俊锛夈傝澶氱嚎绋涓嬶紝鍐呭瓨鏄叡浜殑锛岃繖鏃跺氨姣旇緝鍗遍櫓浜嗭紝浣犺鑷繁浣跨敤閿併佷俊鍙烽噺绛夋満鍒舵潵瑙e喅鍐呭瓨鍧楃殑鍚屾椂璇诲啓鍜屽悓姝ョ瓑绛夈傚鏋滀袱涓姛鑳芥病鏈夋暟鎹渶瑕佸叡浜紝鎴栧彧鏈夊墠鍚庨掕繘鍏崇郴锛屽缓璁娇鐢ㄥ杩涚▼銆傚鏋滀袱涓姛鑳介渶瑕...
  • Linux涓杩涚▼鍜岀嚎绋嬬殑瀵规瘮涓庡尯鍒
    绛旓細杩涚▼鍜绾跨▼鐨勪富瑕佸樊鍒湪浜庡畠浠槸涓嶅悓鐨勬搷浣滅郴缁熻祫婧愮鐞嗘柟寮忋傝繘绋嬫湁鐙珛鐨勫湴鍧绌洪棿锛屼竴涓繘绋嬪穿婧冨悗锛屽湪淇濇姢妯″紡涓嬩笉浼氬鍏跺畠杩涚▼浜х敓褰卞搷锛岃岀嚎绋嬪彧鏄竴涓繘绋嬩腑鐨勪笉鍚屾墽琛岃矾寰勩傜嚎绋嬫湁鑷繁鐨勫爢鏍堝拰灞閮ㄥ彉閲忥紝浣嗙嚎绋嬩箣闂存病鏈夊崟鐙殑鍦板潃绌洪棿锛屼竴涓嚎绋嬫鎺夊氨绛変簬鏁翠釜杩涚▼姝绘帀锛屾墍浠澶氳繘绋嬬殑绋嬪簭瑕佹瘮澶氱嚎绋...
  • linux 涓 杩涚▼鍜岀嚎绋鐨勫尯鍒
    绛旓細杩涚▼鍜绾跨▼鐨勪富瑕佸樊鍒湪浜庡畠浠槸涓嶅悓鐨勬搷浣滅郴缁熻祫婧愮鐞嗘柟寮忋傝繘绋嬫湁鐙珛鐨勫湴鍧绌洪棿锛屼竴涓繘绋嬪穿婧冨悗锛屽湪淇濇姢妯″紡涓嬩笉浼氬鍏跺畠杩涚▼浜х敓褰卞搷锛岃岀嚎绋嬪彧鏄竴涓繘绋嬩腑鐨勪笉鍚屾墽琛岃矾寰勩傜嚎绋嬫湁鑷繁鐨勫爢鏍堝拰灞閮ㄥ彉閲忥紝浣嗙嚎绋嬩箣闂存病鏈夊崟鐙殑鍦板潃绌洪棿锛屼竴涓嚎绋嬫鎺夊氨绛変簬鏁翠釜杩涚▼姝绘帀锛屾墍浠澶氳繘绋嬬殑绋嬪簭瑕佹瘮澶氱嚎绋...
  • linux閲岄潰,杩涚▼涓庣嚎绋鍒板簳鏈変粈涔堟湰璐鐨鍖哄埆?
    绛旓細1.涓涓繘绋嬪彲浠ユ湁澶氫釜绾跨▼锛屼竴涓嚎绋嬪彧鑳藉睘浜庝竴涓繘绋嬨2.鍚屼竴涓杩涚▼涓鐨勬墍鏈夌嚎绋嬪叡浜杩涚▼涓嬬殑鎵鏈夎祫婧愩3.鐪熸鍦ㄥ鐞嗘満涓婅繍琛岀殑鏄嚎绋嬶紝涓嶆槸杩涚▼锛岀嚎绋嬫槸杩涚▼鍐呯殑涓涓墽琛屽崟鍏冿紝鏄繘绋嬪唴鐨勫彲璋冨害瀹炰綋銆Linux绾跨▼涓杩涚▼鍖哄埆 杩涚▼锛氫紭鐐癸細澶氳繘绋鍙互鍚屾椂鍒╃敤澶氫釜CPU锛岃兘澶熷悓鏃惰繘琛屽涓搷浣溿傜己鐐癸細鑰楄垂...
  • Linux杩涚▼鍜岀嚎绋嬬殑鍩虹涓庣鐞
    绛旓細杩涚▼灏辨槸杩愯涓鐨勭▼搴銆備竴涓繍琛岀潃绋嬪簭,鍙兘鏈夊涓繘绋嬨傛瘮濡俉eb鏈嶅姟鍣ㄦ槸Apache鏈嶅姟鍣,褰撶鐞嗗憳鍚姩鏈嶅姟鍚,鍙兘浼氭湁濂藉浜烘潵璁块棶,涔熷氨鏄璁稿鐢ㄦ埛鍚屾椂璇锋眰httpd,Apache鏈嶅姟鍣ㄥ皢浼氬垱寤哄涓猦ttpd杩涚▼鏉ュ鍏惰繘琛屾湇鍔° 棣栧厛鎴戜滑鐪嬬湅杩涚▼鐨瀹氫箟銆傝繘绋嬫槸涓涓叿鏈夌嫭绔嬪姛鑳界殑绋嬪簭鍏充簬鏌愪釜鏁版嵁闆嗗悎鐨勪竴娆″彲浠ュ苟鍙戞墽琛岀殑杩愯娲诲姩...
  • Linux涓嬪绾跨▼鍜屽杩涚▼绋嬪簭鐨勪紭缂虹偣,鍚勪釜閫傚悎浠涔堟牱鐨勪笟鍔″満鏅痏鐧惧害鐭 ...
    绛旓細澶氳繘绋浼樼偣锛氭瘡涓繘绋嬩簰鐩哥嫭绔嬶紝涓嶅奖鍝嶄富绋嬪簭鐨绋冲畾鎬э紝瀛愯繘绋嬪穿婧冩病鍏崇郴锛涢氳繃澧炲姞CPU锛屽氨鍙互瀹规槗鎵╁厖鎬ц兘锛涘彲浠ュ敖閲忓噺灏戠嚎绋嬪姞閿/瑙i攣鐨勫奖鍝嶏紝鏋佸ぇ鎻愰珮鎬ц兘锛屽氨绠楁槸绾跨▼杩愯鐨勬ā鍧楃畻娉曟晥鐜囦綆涔熸病鍏崇郴锛涙瘡涓瓙杩涚▼閮芥湁2GB鍦板潃绌洪棿鍜岀浉鍏宠祫婧愶紝鎬讳綋鑳藉杈惧埌鐨勬ц兘涓婇檺闈炲父澶 澶氱嚎绋缂虹偣锛氶昏緫鎺у埗澶嶆潅锛岄渶瑕佸拰...
  • linux鏄澶氱嚎绋杩樻槸澶氳繘绋
    绛旓細鑰屽紩鍏ョ嚎绋嬫槸涓轰簡鍑忓皯绋嬪簭骞跺彂鎵甯︽潵鐨勬椂闂村拰绌洪棿鐨勫紑閿锛岀嚎绋嬫槸姣旇繘绋嬫洿灏忕殑鍗曚綅锛屼竴涓繘绋嬭嚦灏戞湁涓涓嚎绋嬶紝绾跨▼鏄搷浣滅郴缁熻繘琛岃皟搴︾殑鍩烘湰鍗曚綅锛岀嚎绋嬪熀鏈笂涓嶅崰鐢ㄧ郴缁熻祫婧愶紝绾跨▼涓鍏朵粬鍚屽睘涓涓杩涚▼鐨绾跨▼鍏变韩璇ヨ繘绋嬫墍鍗犳湁鐨勮祫婧愩linux鏄釜绯荤粺锛屾敮鎸佸悇绉嶆湇鍔★紝鏈嶅姟鍙互寮鍚澶氳繘绋锛岃繘绋嬪彲浠ュ紑鍚澶氱嚎绋 ...
  • 鍦╳indows涓鐨勮繘绋銆绾跨▼鍜鍦linux涓殑杩涚▼銆佺嚎绋嬫湁浠涔堝尯鍒?
    绛旓細棣栧厛linux鍙湁杩涚▼鑰屾病鏈夌嚎绋嬶紝鐒惰屽畠鐨勮繘绋嬪張鍙互琛ㄧ幇寰楀儚windows涓鐨勭嚎绋銆俵inux鍒╃敤fork()鍜宔xec鍑芥暟鏃忔潵鎿嶄綔澶氳繘绋銆俧ork()鍑芥暟鍙互鍦ㄨ繘绋嬫墽琛岀殑浠讳綍闃舵琚皟鐢紝涓鏃﹁皟鐢紝褰撳墠杩涚▼灏辫鍒嗗弶鎴愪袱涓繘绋嬧斺旂埗杩涚▼鍜屽瓙杩涚▼锛屼袱鑰呮嫢鏈夌浉鍚岀殑浠g爜娈靛拰鏆傛椂鐩稿悓鐨勬暟鎹锛堣櫧鐒舵殏鏃剁浉鍚岋紝浣嗕粠鍒嗗弶寮鐨勬椂鍒诲氨鏄...
  • ...鍜岀嚎绋嬫湁浠涔堝尯鍒拰鑱旂郴,linux涓嬪绾跨▼鍜屽杩涚▼閫氫俊鐨勫疄鐜版柟娉,璇...
    绛旓細1銆佽繘绋嬫槸鍒嗛厤璁$畻鏈鸿祫婧愭渶灏忕殑鍗曚綅銆備綘鎯冲晩浜烘槸瑕佺敤绋嬪簭骞叉椿鐨勫惂锛熶綘鎶婄▼搴忚皟鍏ュ唴瀛樻垚浜嗗氨鎴愪簡杩涚▼锛屾墍浠ヨ杩涚▼鏄垎閰嶈祫婧愮殑鏈灏忓崟浣嶃備綘鍦linux涓鎵撳紑缁堢杈撳叆top鍛戒护鐪嬫槸涓嶆槸鏈夊ソ澶氳繘绋锛2銆佽繘绋嬫湁鎿嶄綔绯荤粺涓轰綔涓氫骇鐢熴傛湁鈥滅埗杩涚▼鈥濅骇鐢熲滃瓙杩涚▼鈥濅箣闂存槸鐖跺瓙鍏崇郴锛屽苟鍙互缁х画鍚戜笅浜х敓鈥滃瓙杩涚▼鈥濄傝繕...
  • 本站交流只代表网友个人观点,与本站立场无关
    欢迎反馈与建议,请联系电邮
    2024© 车视网