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