請問Linux比windows系統效率高,具體體現在哪些方面?

最近項目要選擇Linux還是windows,其中運行效率是注意考慮因素,需要論證下為什麼Linux比windows快,大家都說Linux當然比windows快,但是卻沒有說出為什麼快,我想請大家從內存管理機制,文件系統,編譯優化等底層解析下,謝謝!注意是運行效率,不是開發效率等,可以先拋開gui不談...

========問題更新2015.11.17==========

首先感謝大家的回答,我原來是以為Linux在內存機制,文件系統,多線程進程管理機制等方面本身就優於windows……,看來是題主姿勢不對!總結大家的回答,主流是優化和具體問題具體分析!在具體問題上做專項優化後Linux就會體現出優勢...

至於我的需求,其實談不上項目,也用不到那麼深高層次:我們做股票程序化交易,程序涉及資料庫讀寫,網路交互,多線程,並不複雜,就是選擇在windows上跑還是Linux上,我想程序上了之後也不會去優化操作系統吧!比較是基於Linux個windows都沒有優化的情況下!還有重要的一點就是我們的軟體把數據都載入到內存中的,運行的時候都是高內存佔用,這個時候會引起效率上的偏差么?

其實我更想提出一個議題大家討論下,就是因為我搜索「Linux和windows效率比較」字眼後發現答案都比較籠統,只給結論沒給理由,所以把問題拿這裡來了……


我沒有能力回答這種關係項目成敗的CTO級別的問題。

  • 你們以前的項目是用Linux還是Windows?
  • 以前的項目有多大?多少人做了多少個月?
  • 新項目有多大?預計要多少人做多少個月?開發人員熟悉Linux還是Windows?


CTO考慮的系統性能是一個數字:每一塊錢軟硬體成本能支持的請求數。

Windows Server和Linux Server都很快,把OS性能割裂起來比較沒有特別的意義,要看你的預算,硬體配置,要支持的服務吞吐量綜合起來考量。Linux可以跑在很普通的系統上,內核很小,可定製(kernel module)的,同樣硬體下,Linux能擠出更多性能來。


Linux如果不快,你可以從內核開始一層層分析性能瓶頸,而Windows是個黑箱子。

就這一點,就決定了Linux環境完勝。

——前提是,你們能搞定「從內核開始一層層分析性能瓶頸」。


題主想做程序化股票交易,並且追求「快」,這樣的系統叫高頻交易(High-frequency trading / HFT)系統。關於這種系統的方方面面的研究和討論已經有15+年的歷史,發展出了一整套方法、理論和實踐,都可以看成是計算機的一個子方向了。

在這當中,一個基本的話題就是操作系統,而結論早就有了:為了追求極限低延遲(個位數毫秒級),Linux的開源特性允許你對系統進行優化重編譯,根據需要對代碼進行精細優化和清理,針對自己的程序運行特性修改系統內核,把網路協議里不必要的層抽掉,當然你需要相應構建自己的配置、安全等模塊來彌補砍掉的功能,在各種HFT論壇有很多資料供參考。

題主又提到了需求沒那麼極限,也不會真的修改操作系統。其實來知乎發問就說明題主整個團隊對HFT和高性能編程所知甚少,這種情況下,題主的團隊還有很長的路要走,操作系統的性能差別並不重要,項目因素才是決策關鍵,比如其他答案里提到的軟體成本、開發效率、團隊技能樹等等。即使到了性能優化那一步,也記得先從程序本身找問題,絕大多數性能問題都根本怪不到操作系統頭上。


可能是沒有qq、微信吧


跑程序實際上沒有多大的區別,只是有些情況下Windows開銷比較大,而這種情況下win確實比Linux慢,因為每個操作系統都有自己的瓶頸。

很不幸的是開源軟體的windows實現很多都是簡單地把UNIX版搬過來在Cygwin等環境里運行,並沒有對win進行任何優化,所以接觸這方面比較多的話認為win比Linux慢也是很正常的事情,當然,是一種無知的表現。

比如對進程的頻繁創建等,linux無論是全新創建進程還是fork開銷都比win小,尤其是普通windows版本的默認配置,個人的經驗是GNU make在這種配置的win下比Linux慢一萬倍(誇張),因為它不停地創建編譯器進程,看著任務管理器都要醉了。。。

如果僅僅是移到Windows Server上,或者精心調教一下(比如關掉兼容性檢查等),也會快不少(雖說還是比Linux慢)

相比之下專門為Windows優化的MSBuild就要快得多,因為有多少個CPU核心就創建多少編譯器進程,編譯一個項目就反覆利用這些進程。

而真正跑起網站來,在眾多測試中,IIS也一直都是以優異的成績領先Linux下某主流web伺服器,市場份額也是第二,並沒有什麼問題,就是貴一點而已。再看資料庫,也沒聽說過Microsoft SQL Server很慢,不過非常貴。

所以我現在都懷疑是不是大部分說Windows慢的都是用不起Windows,然後日常黑?

項目多投點錢又有什麼錯(逃


windows主要是桌面,那麼linux主要是伺服器。以前桌面佔主流,以後甚至現在(沒研究數據)伺服器會超過桌面。就像手機超過pc一樣。

雖然題目是問哪個快,但實際問的是選型問題,因此從其他方面來回答下。

大部分開源軟體(伺服器相關),都支持linux跟windows,一般是先有linux版本,用的人多了,windows版本也出來了,雖然2者都有,linux的支持更好些,有的功能特性windows版本會因各種原因閹割。

linux移植性高,各種cpu。

就web伺服器來說,windows也有很快的東西,但跟linux不一樣。比如nginx在linux算是標準性軟體,在windows雖然也有,但更多的是微軟自己的iis。可以這麼說,如果要用windows跑的比linux快或者差不多,那麼2者使用的軟體可能很多不一樣。linux使用的軟體人更多,支持更好。

另外,windows來說,也是有伺服器版本之分的,即便用普通版,設置也不一樣的,ui開銷是很大的,動一下滑鼠,喚醒桌面,就會卡一下,一般來說這台伺服器跟linux一樣,不會有人在上面用ui的。

還有你的項目來說應該不止一台伺服器吧,至少資料庫是可以單獨選型的。

如果要用到ui,建議ui用windows,其他用linux。


windows上面連ssh略麻煩.....不過貌似win10的cmd原生支持ssh了. 還有配置開發環境裝個package的話感覺unix-based 普遍容易一些但是visual studio還是是神器啊.....感覺三個系統都各有優勢所以我還是三飛起了......不過window的命令行確實值得改進啊,從字體開始..


謝邀。

Linux好多人都是用伺服器發布版本做伺服器,穩定,好用。

用特定版本內核鼓搗嵌入式系統,輕量,高度定製,好用。

然而要圖形桌面的時候(比如打遊戲和一般辦公)還是會考慮用Windows的。

所以說多學學多用用沒有壞處。各種系統都搞清楚了選擇會多一些。


沒有微博,微信,視頻網站客戶端,遊戲少,只能專註工作,效率高不高,你說呢?


說純說運行性能,我只能說相差無幾,是一個完完全全可以被忽略的因素。不要糾結這個問題,這不值得浪費時間去研究。技術構架,開發,運營,維護才是考慮方向。


我只能說,Windows系統的I/O性能較Linux 內核 2.6.x版本高,因為Windows內核代碼是隨處都允許「中斷執行「的,而Linux 2.6.x內核僅允許在特定位置」中斷執行「。具體說,Windows內核定義了8個級別的IRQL。當發生更高級別(搞IRQL)中斷時,例如:I/O完成中斷,Windows內核允許當前代碼運行立刻中斷,然後跳轉到對應的ISR代碼處理I/O終端事件,而Linux不行。所以,我認為Windows系統I/O性能較Linux 2.6.x高。

本人多年前編寫過Windows內核驅動程序,對此深有體會。也正因為IRQL,導致驅動程序編寫比較複雜。


拋開應用場景比較兩個系統,都是沒有意義的。即使別人說Linux執行效率再高,但是你的需求是玩最新的極品飛車遊戲,那Linux對於你就是不實用的。

假設Linux下gcc的編譯效率是Windowns下cl的6倍,編譯一個10萬行c代碼gcc用時10秒(只是純假設),那麼在Win下cl要用時1分鐘,但是對於開發獨立於平台的程序員來說寧可在編譯時多等待50秒,也會選擇在Win下使用Visual Studio,因為讀代碼時或開發時IDE的各種智能工具早已省出了很多個50秒;而對於配置管理人員來說就更偏愛Linux多一些,只用記熟幾個常用命令就可以又快又好地完成日常工作。

所以沒有絕對效率高的平台,只有最適合自己的,或是自己喜歡的系統。


主要是能讓人少用滑鼠多用鍵盤。


我覺得要看你對程序化交易的要求。

如果是超高頻交易,對低延遲要求極高,那對系統和硬體的要求都很高。我沒做過超高頻,不太了解細節,但我知道水很深,做好了不容易。

如果是分鐘級別以上的自動化交易,對系統的要求和速度的要求就沒那麼高了,從你所說的要求來看(資料庫讀寫,網路交互,多線程),windows和linux都沒有問題,我覺得更重要在於系統之外,比如開發人員熟悉哪個系統,已有代碼是基於什麼平台等等。

從第三方數據或工具的對接來說,可能windows會更方便,例如萬得這樣的數據提供商有很好的windows終端和API。可能也會有對應的linux版本,但我一直在windows平台,具體不太清楚。這是要考慮的一個方面吧。


linux經驗不是很多,說下個人看法:

linux的高效很多體現在系統管理配置上,對於懂的人來說,用一串shell命令來配置系統真是非常方便。其次是作為服務的載體,用linux能控制系統的絕大多數功能,比較靈活,原來試著在windows server系統上搭建vpn伺服器,按教程和文檔來做很麻煩,有些功能甚至實現不了,但是在linux上比較方便就可以配置。

如果考慮你程序的延遲,在兩個系統上實現都不會有明顯的高低,主要還是看自己的實現,但是根據一般說法,做性能要求極高的程序,還是在*nux上做,至於具體原因,不清楚,有待補充!


個人覺得,如果是做程序化交易,還要看你們這個系統的預期吧

如果說僅僅是滿足眼下的需求,對延遲、性能等方面要求不高,比如說毫秒級的,操作系統的選擇不是你們的問題

如果說系統以後想要擴展或升級,對性能要求較高,要求做到毫秒級,還是選擇Linux吧,拋開windows沉重的GUI不談,Linux畢竟是開放的,甚至可以修改內核


遙記當年上操作系統課程,windows和linux的內存模型不同,頁表文件的默認初始值、交換策略等各有側重。前者側重於應用、後者側重於服務。

當然,可以說windows也有server版本、這些策略可能和linux很類似,這點上我還真的無言以對。

雖然問的是性能吧,我還是覺得、之前的windows太貴了,才沒有人用的……


信仰方面


linux本來就是個內核,你可以適當的剪裁和添加自己需要的功能。並且作為伺服器比windows穩定,有強大的社區支持,這些才是優勢


推薦閱讀:

搏擊類的道館裡,你見過最裝逼的行為或人是怎樣的?
現實中的特工有沒有金盆洗手的機會?
他們裝逼太厲害,我比不過他們。如何戒掉裝逼?
如何在星巴克有逼格的裝逼?
打撞球怎樣裝逼?

TAG:操作系統 | 編程 | Linux開發 | Linux內核 | 裝腔 |