?? 00000031.htm
字號(hào):
<HTML><HEAD> <TITLE>BBS水木清華站∶精華區(qū)</TITLE></HEAD><BODY><CENTER><H1>BBS水木清華站∶精華區(qū)</H1></CENTER>發(fā)信人: nudtbegger (軍人), 信區(qū): Linux <BR>標(biāo) 題: 再論"對(duì)linux的質(zhì)量質(zhì)疑" <BR>發(fā)信站: BBS 水木清華站 (Fri Jul 30 17:48:07 1999) WWW-POST <BR> <BR> 昨天中午我回了suxm和mephisto的兩篇文章,也是花了不少工夫
<BR>的,但是,昨天晚上再看,結(jié)果兩篇文章都不見了,我實(shí)在是
<BR>莫名其妙,因?yàn)槲业奈恼吕镎f實(shí)話沒有任何違反規(guī)定的地方,我
<BR>個(gè)人向來都是從技術(shù)到技術(shù),不喜歡感情介入其中的。后來我給
<BR>mephisto去了一封信,他說不是他刪的,讓我再回一次,但是我
<BR>實(shí)在是沒有再回的激情了,但是說實(shí)話,我還是很希望繼續(xù)這個(gè)
<BR>linux的討論,因?yàn)槲覀€(gè)人覺得任何人要忽略linux都是不現(xiàn)實(shí)的。
<BR>和幾位高手討論很有收獲.
<BR> 言歸正傳吧,我先說一下RT-NT的事情,suxm的意思好象不相信
<BR>我說的有RTNT,昨天我特地把網(wǎng)址抄了一個(gè),但是現(xiàn)在有點(diǎn)忘了,
<BR>但是我想說的是,如果看過WDJ,(windows developer j)從97年
<BR>到99年5期(再后的我也沒看過),幾乎每一期都有RTNT的廣告,而且
<BR>版面不小,很容易找到。用大的搜索引擎也能找到。好象是
<BR>www.imagination.com,因?yàn)槲椰F(xiàn)在上網(wǎng)出不了國,沒法驗(yàn)證。
<BR> 關(guān)于suxm說的95和NT的線程時(shí)間片,我記得很多書上都說95是20ms,
<BR>不知道suxm為什么說是30ms,所以我懷疑是不是我理解錯(cuò)了他的意思,
<BR>說的不是同一個(gè)東西。關(guān)于NT的最小時(shí)間片,我承認(rèn)是記錯(cuò)了,應(yīng)該是
<BR>10ms。
<BR> 然后我再說和mephisto討論的LINUX的異步IO問題,這兩天來一直在
<BR>翻代碼,但是關(guān)于LINUX,說實(shí)在的是涉及不多,下面我談?wù)勎覀€(gè)人的
<BR>一些理解。
<BR> mephisto告訴我說LINUX的實(shí)現(xiàn)異步的方法是SELECT,我就回去仔細(xì)
<BR>的看了看SELECT,覺得SELECT并不是一種令人滿意的實(shí)現(xiàn)異步的方法,
<BR>尤其無法讓程序員滿意。
<BR> 由于有了多線程,原有的很多用到異步IO的地方,都可以用多線程的
<BR>方法解決。比如DISK IO,完全可以開一個(gè)線程來完成,因?yàn)檫@種情況下,
<BR>IO要求可以預(yù)測,時(shí)間也可預(yù)測,而且次數(shù)不多,所以這種解決方法是
<BR>可以接受的。
<BR> 異步IO最大的實(shí)現(xiàn)背景應(yīng)該是網(wǎng)絡(luò)應(yīng)用吧,特別是SERVER(WEB,F(xiàn)TP,
<BR>TELNET,etc),因?yàn)長INUX本身也是定位到SERVER的吧,我們從來沒有把
<BR>LINUX跟95比,總是跟NT比,我的印象中,LINUX是一個(gè)NET SERVER。
<BR>但是我覺得就SELECT的實(shí)現(xiàn)方法來說,并沒有考慮到SERVER的特點(diǎn)。
<BR> 對(duì)于SERVER應(yīng)用來說,其特點(diǎn)是數(shù)據(jù)流量不定,觸發(fā)流量大,可能
<BR>同一時(shí)刻有幾千個(gè)連接。最簡單的實(shí)現(xiàn)方法是老方法,對(duì)應(yīng)每個(gè)連接請(qǐng)求
<BR>建立一個(gè)線程,當(dāng)然也可以建立一個(gè)進(jìn)程。但是這種方法耗費(fèi)資源巨大,
<BR>很難想象1000個(gè)連接會(huì)發(fā)生什么,線程太多本身要耗費(fèi)資源,CPU在這么多
<BR>線程之間進(jìn)行切換本身就是不小的開銷,而且如此多的線程要用到的同步
<BR>核心對(duì)象也是一個(gè)不小的開銷。該方法本質(zhì)上效率不高。如果是實(shí)驗(yàn)室里
<BR>10臺(tái)PC的SERVER,當(dāng)然無所謂,但是,我想......
<BR> 很自然的,我們想到了一個(gè)線程處理多個(gè)連接,這樣SERVER里就可以
<BR>由不多的線程來應(yīng)付很多個(gè)連接。這就要求OS的兩個(gè)支持,1線程有效的
<BR>等待多個(gè)事件(EVENT)的能力,2真正的異步IO。幸運(yùn)的是,作為WIN32
<BR>程序員,NT完全支持這兩點(diǎn),下面我就說一點(diǎn)我個(gè)人對(duì)LINUX的
<BR>看法。
<BR> 1等待多個(gè)事件的能力,SELECT是LINUX實(shí)現(xiàn)單線程對(duì)多請(qǐng)求的唯一方法,
<BR>(若不對(duì),請(qǐng)指出)。系統(tǒng)用SELECT在事件到來(eg.當(dāng)一個(gè)REQUEST到來時(shí))
<BR>通知所有的等待同一事件的線程,但是卻只有一個(gè)線程能處理。這樣有幾個(gè)
<BR>開銷,1,喚醒的幾個(gè)線程要同步,最后只能由一個(gè)線程來完成服務(wù)。2,有
<BR>不少線程本來只要睡眠就行,結(jié)果卻被喚醒,雖然很快就又接著等待,但是
<BR>CPU時(shí)間又消耗不少。有了這兩大限制,我的一個(gè)師兄告訴我說,一般都是
<BR>用一個(gè)線程守侯,當(dāng)來了REQUEST,就通知另一個(gè)線程守侯,自己處理,或者
<BR>通知另一個(gè)線呈處理,自己接著守侯。這樣仍然增加了開銷。如果LINUX
<BR>象NT那樣,提供能夠只喚醒一個(gè)線程的函數(shù),無疑將提高處理REQUEST的效率。
<BR> 2異步IO的能力。真正的異步IO和非阻塞IO是不同的,LINUX下實(shí)現(xiàn)的就
<BR>是非阻塞IO。LINUX下一個(gè)網(wǎng)絡(luò)線程執(zhí)行了非阻塞IO讀,從連接中讀取CLIENT
<BR>的數(shù)據(jù),但是,這時(shí)CLIENT的數(shù)據(jù)還未到,該線程可以執(zhí)行其他的工作,但是,
<BR>該線程在數(shù)據(jù)到來時(shí)還要執(zhí)行一次讀,否則就得不到數(shù)據(jù),如果不知道什么
<BR>時(shí)候數(shù)據(jù)能到,將循環(huán)等待。但是在真正的異步IO中,情況不是這樣,線程
<BR>執(zhí)行一條讀后,就不要在讀,系統(tǒng)在數(shù)據(jù)到來時(shí)會(huì)通知線程。
<BR>大家都熟知WAITMULTIOBJECT和GETOVLAPPED函數(shù),我就不多說了。
<BR> 3長時(shí)間以來,我個(gè)人感覺就是LINUX的重入性不好,當(dāng)然,很多人都告訴
<BR>我說要用發(fā)展的眼光看問題,但是,我覺得還是發(fā)展的太慢。重入性不好帶
<BR>來的直接問題就是多處理器解決不好,這個(gè)問題LINUX社區(qū)都已經(jīng)承認(rèn),我
<BR>不再多說。我只加一條NT的例子。NT4的寫函數(shù)在網(wǎng)絡(luò)IO中只有很少的在
<BR>網(wǎng)卡driver的函數(shù)不可重入,但是,就是這個(gè)問題,使的NT在4處理器的SERVER
<BR>中和SOLARIS相比處于下風(fēng),MS迅速的推出了SP4,和NT2000,解決了這個(gè)問題。
<BR>LINUX的定位我相信是要在SERVER上和其他OS一爭的,解決不了這個(gè)問題,是
<BR>無法達(dá)到這個(gè)目標(biāo)的。
<BR> LINUX的目標(biāo),我個(gè)人的看法是LINUX肯定是想在大型服務(wù)器上和其他OS
<BR>競爭的,但是就LINUX目前的狀態(tài),還無法和NT和SUNOS相比。PC WEEK做
<BR>的NT VS LINUX,當(dāng)在多CPU,多網(wǎng)卡的情況下,LINUX根本不能和NT比,
<BR>在IT發(fā)展如此迅猛的今天,MS的做法是把資源耗光,這樣,硬盤,
<BR>內(nèi)存發(fā)展迅猛,才會(huì)如此的便宜,如果NT2000早點(diǎn)推出,現(xiàn)在也許還要更便宜。
<BR>LINUX如果停留在能讓過期的機(jī)器跑起來的目標(biāo)之中,是不能參與未來的
<BR>競爭的。
<BR> 以上都只是我個(gè)人的一些看法,拋磚引玉,希望大家能深入討論。
<BR>
<BR>
<BR>
<BR> <BR> <BR>-- <BR>※ 來源:·BBS 水木清華站 bbs.net.tsinghua.edu.cn·[FROM: 202.197.0.1] <BR><CENTER><H1>BBS水木清華站∶精華區(qū)</H1></CENTER></BODY></HTML>
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -