|
關(guān)于WinNT和Linux的比較,這個(gè)話題說起來就沒個(gè)完,隨便講講吧。 第一、微內(nèi)核。很多人并沒有理解,微內(nèi)核實(shí)際上是一種以性能下降為代價(jià),而提高軟件架構(gòu)合理性的設(shè)計(jì)方案。更加完美的微內(nèi)核架構(gòu)Mach,在他誕生之后多年,其性能都飽受詬病,直到更強(qiáng)大的PowerPC G5處理器出現(xiàn)之后,才在新一代的Mac OS 10上得以商用。那么,如果說采用了微內(nèi)核架構(gòu)WinNT,其性能達(dá)到甚至超過沒有采用微內(nèi)核架構(gòu)的Linux,那么誰的代碼更優(yōu)化不就一目了然了嗎? 在有可能安裝大量第三方驅(qū)動(dòng)程序的條件下,微內(nèi)核架構(gòu)崩潰的概率要遠(yuǎn)小于非微內(nèi)核架構(gòu),這只是微內(nèi)核的優(yōu)點(diǎn)之一。 第二、GDI。WinNT的GDI處理更多的是放在內(nèi)核中的,XWindow則不然,因此XWindow從理論上講就不可能比WinNT的窗口系統(tǒng)效率高。這樣的設(shè)計(jì)如果用于服務(wù)器的OS顯然不可取,但在本貼的范圍內(nèi),討論的都是個(gè)人電腦的OS,顯然WinNT要比Linux更適合圖形界面的桌面應(yīng)用(Linux或許更適合于服務(wù)器,因?yàn)樗?jiǎn)單,簡(jiǎn)單意味著高效) 第三、線程管理。Linux內(nèi)核直到2.4版,線程的實(shí)現(xiàn)仍是相當(dāng)?shù)托实?,連Linux開發(fā)者自己也不滿意,所以才有了2.6內(nèi)核的NPTL,可是2.6內(nèi)核投入商用才幾年?從這一點(diǎn)來講,恰恰就是“落后了一代”。 同樣,直到2.4內(nèi)核,Linux的內(nèi)核任務(wù)(核內(nèi)線程)仍然是不可搶占的。實(shí)際上在2.4內(nèi)核上運(yùn)行多優(yōu)先級(jí)的高并發(fā)的多線程程序仍然是一個(gè)笑話。 我個(gè)人認(rèn)為WinNT的線程同步接口比pthread要更加合理和豐富,使程序開發(fā)更加方便。WaitForMultipleObjects是WinNT線程同步上的一大特色,著名的ACE專門為其WinNT實(shí)現(xiàn)版本包裝了這個(gè)方法。 第四、I/O。WinNT多年以前就實(shí)現(xiàn)了與POSIX 1003.1c中 aio_xxxx 語義相類似的OVERLAPPED異步I/O機(jī)制,這種模式可以顯著提高I/O的吞吐率,Linux呢? 實(shí)際上在線程管理和I/O模式這些對(duì)系統(tǒng)性能至關(guān)重要的方面,無論WinNT、IBM AIX、SUN Solaris,其先進(jìn)性都超過Linux一代。和這些成熟的商用系統(tǒng)比起來,Linux更像是個(gè)血?dú)夥絼偟男』镒樱贻p不成熟,但得到全球開源界的支持,因而強(qiáng)壯并且后勁十足。 第五、網(wǎng)絡(luò)處理。對(duì)于大規(guī)模并發(fā)的網(wǎng)絡(luò)操作(想一想BT下載),select和poll實(shí)現(xiàn)了第一代Reactor模型,而WinNT的完成端口模型和Linux 2.6內(nèi)核的EPOLL則可以稱之為第二代Reactor,其共同特點(diǎn)是使用不止一條API調(diào)用,引入了一個(gè)真正的內(nèi)核對(duì)象來存儲(chǔ)Reactor的狀態(tài)信息,從而避免了第一代Reactor巨大的查詢開銷。而完成端口模型的誕生時(shí)間,比EPOLL要早5年以上(雖然EPOLL后來居上,比完成端口更合理一些)。 文件系統(tǒng)我不熟悉,就不說了。但以上的對(duì)比足夠說明WinNT在內(nèi)核的技術(shù)體系上比Linux先進(jìn)一代了吧。 實(shí)際上,在OS的核心技術(shù)上,Linux一直扮演的都是一個(gè)跟隨者的角色,難道一幫程序愛好者的松散結(jié)盟,真的能比軟件巨頭們真金白銀的投入更管用么?當(dāng)然,現(xiàn)在Linux得到了很多軟件巨頭的支持,所以將來他或許會(huì)有后來居上的機(jī)會(huì)。2.6內(nèi)核的許多新特性已經(jīng)體現(xiàn)出了這種可能。 |
|
|