00000004.htm

来自「一份很好的linux入门资料」· HTM 代码 · 共 106 行

HTM
106
字号
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;nudtbegger&nbsp;(军人),&nbsp;信区:&nbsp;Linux&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;再论&quot;对linux的质量质疑&quot;&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Fri&nbsp;Jul&nbsp;30&nbsp;17:48:07&nbsp;1999)&nbsp;WWW-POST&nbsp;<BR>&nbsp;<BR>&nbsp;&nbsp;&nbsp;昨天中午我回了suxm和mephisto的两篇文章,也是花了不少工夫
&nbsp;<BR>的,但是,昨天晚上再看,结果两篇文章都不见了,我实在是
&nbsp;<BR>莫名其妙,因为我的文章里说实话没有任何违反规定的地方,我
&nbsp;<BR>个人向来都是从技术到技术,不喜欢感情介入其中的。后来我给
&nbsp;<BR>mephisto去了一封信,他说不是他删的,让我再回一次,但是我
&nbsp;<BR>实在是没有再回的激情了,但是说实话,我还是很希望继续这个
&nbsp;<BR>linux的讨论,因为我个人觉得任何人要忽略linux都是不现实的。
&nbsp;<BR>和几位高手讨论很有收获.&nbsp;&nbsp;&nbsp;
&nbsp;<BR>&nbsp;&nbsp;&nbsp;言归正传吧,我先说一下RT-NT的事情,suxm的意思好象不相信
&nbsp;<BR>我说的有RTNT,昨天我特地把网址抄了一个,但是现在有点忘了,
&nbsp;<BR>但是我想说的是,如果看过WDJ,(windows&nbsp;developer&nbsp;j)从97年
&nbsp;<BR>到99年5期(再后的我也没看过),几乎每一期都有RTNT的广告,而且
&nbsp;<BR>版面不小,很容易找到。用大的搜索引擎也能找到。好象是
&nbsp;<BR>www.imagination.com,因为我现在上网出不了国,没法验证。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;关于suxm说的95和NT的线程时间片,我记得很多书上都说95是20ms,
&nbsp;<BR>不知道suxm为什么说是30ms,所以我怀疑是不是我理解错了他的意思,
&nbsp;<BR>说的不是同一个东西。关于NT的最小时间片,我承认是记错了,应该是
&nbsp;<BR>10ms。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;然后我再说和mephisto讨论的LINUX的异步IO问题,这两天来一直在
&nbsp;<BR>翻代码,但是关于LINUX,说实在的是涉及不多,下面我谈谈我个人的
&nbsp;<BR>一些理解。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;mephisto告诉我说LINUX的实现异步的方法是SELECT,我就回去仔细
&nbsp;<BR>的看了看SELECT,觉得SELECT并不是一种令人满意的实现异步的方法,
&nbsp;<BR>尤其无法让程序员满意。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;由于有了多线程,原有的很多用到异步IO的地方,都可以用多线程的
&nbsp;<BR>方法解决。比如DISK&nbsp;IO,完全可以开一个线程来完成,因为这种情况下,
&nbsp;<BR>IO要求可以预测,时间也可预测,而且次数不多,所以这种解决方法是
&nbsp;<BR>可以接受的。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;异步IO最大的实现背景应该是网络应用吧,特别是SERVER(WEB,FTP,
&nbsp;<BR>TELNET,etc),因为LINUX本身也是定位到SERVER的吧,我们从来没有把
&nbsp;<BR>LINUX跟95比,总是跟NT比,我的印象中,LINUX是一个NET&nbsp;SERVER。
&nbsp;<BR>但是我觉得就SELECT的实现方法来说,并没有考虑到SERVER的特点。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;对于SERVER应用来说,其特点是数据流量不定,触发流量大,可能
&nbsp;<BR>同一时刻有几千个连接。最简单的实现方法是老方法,对应每个连接请求
&nbsp;<BR>建立一个线程,当然也可以建立一个进程。但是这种方法耗费资源巨大,
&nbsp;<BR>很难想象1000个连接会发生什么,线程太多本身要耗费资源,CPU在这么多
&nbsp;<BR>线程之间进行切换本身就是不小的开销,而且如此多的线程要用到的同步
&nbsp;<BR>核心对象也是一个不小的开销。该方法本质上效率不高。如果是实验室里
&nbsp;<BR>10台PC的SERVER,当然无所谓,但是,我想......
&nbsp;<BR>&nbsp;&nbsp;&nbsp;很自然的,我们想到了一个线程处理多个连接,这样SERVER里就可以
&nbsp;<BR>由不多的线程来应付很多个连接。这就要求OS的两个支持,1线程有效的
&nbsp;<BR>等待多个事件(EVENT)的能力,2真正的异步IO。幸运的是,作为WIN32
&nbsp;<BR>程序员,NT完全支持这两点,下面我就说一点我个人对LINUX的
&nbsp;<BR>看法。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;1等待多个事件的能力,SELECT是LINUX实现单线程对多请求的唯一方法,
&nbsp;<BR>(若不对,请指出)。系统用SELECT在事件到来(eg.当一个REQUEST到来时)
&nbsp;<BR>通知所有的等待同一事件的线程,但是却只有一个线程能处理。这样有几个
&nbsp;<BR>开销,1,唤醒的几个线程要同步,最后只能由一个线程来完成服务。2,有
&nbsp;<BR>不少线程本来只要睡眠就行,结果却被唤醒,虽然很快就又接着等待,但是
&nbsp;<BR>CPU时间又消耗不少。有了这两大限制,我的一个师兄告诉我说,一般都是
&nbsp;<BR>用一个线程守侯,当来了REQUEST,就通知另一个线程守侯,自己处理,或者
&nbsp;<BR>通知另一个线呈处理,自己接着守侯。这样仍然增加了开销。如果LINUX
&nbsp;<BR>象NT那样,提供能够只唤醒一个线程的函数,无疑将提高处理REQUEST的效率。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;2异步IO的能力。真正的异步IO和非阻塞IO是不同的,LINUX下实现的就
&nbsp;<BR>是非阻塞IO。LINUX下一个网络线程执行了非阻塞IO读,从连接中读取CLIENT
&nbsp;<BR>的数据,但是,这时CLIENT的数据还未到,该线程可以执行其他的工作,但是,
&nbsp;<BR>该线程在数据到来时还要执行一次读,否则就得不到数据,如果不知道什么
&nbsp;<BR>时候数据能到,将循环等待。但是在真正的异步IO中,情况不是这样,线程
&nbsp;<BR>执行一条读后,就不要在读,系统在数据到来时会通知线程。
&nbsp;<BR>大家都熟知WAITMULTIOBJECT和GETOVLAPPED函数,我就不多说了。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;3长时间以来,我个人感觉就是LINUX的重入性不好,当然,很多人都告诉
&nbsp;<BR>我说要用发展的眼光看问题,但是,我觉得还是发展的太慢。重入性不好带
&nbsp;<BR>来的直接问题就是多处理器解决不好,这个问题LINUX社区都已经承认,我
&nbsp;<BR>不再多说。我只加一条NT的例子。NT4的写函数在网络IO中只有很少的在
&nbsp;<BR>网卡driver的函数不可重入,但是,就是这个问题,使的NT在4处理器的SERVER
&nbsp;<BR>中和SOLARIS相比处于下风,MS迅速的推出了SP4,和NT2000,解决了这个问题。
&nbsp;<BR>LINUX的定位我相信是要在SERVER上和其他OS一争的,解决不了这个问题,是
&nbsp;<BR>无法达到这个目标的。
&nbsp;<BR>&nbsp;&nbsp;LINUX的目标,我个人的看法是LINUX肯定是想在大型服务器上和其他OS
&nbsp;<BR>竞争的,但是就LINUX目前的状态,还无法和NT和SUNOS相比。PC&nbsp;WEEK做
&nbsp;<BR>的NT&nbsp;VS&nbsp;LINUX,当在多CPU,多网卡的情况下,LINUX根本不能和NT比,
&nbsp;<BR>在IT发展如此迅猛的今天,MS的做法是把资源耗光,这样,硬盘,
&nbsp;<BR>内存发展迅猛,才会如此的便宜,如果NT2000早点推出,现在也许还要更便宜。
&nbsp;<BR>LINUX如果停留在能让过期的机器跑起来的目标之中,是不能参与未来的
&nbsp;<BR>竞争的。
&nbsp;<BR>&nbsp;&nbsp;以上都只是我个人的一些看法,抛砖引玉,希望大家能深入讨论。
&nbsp;<BR>&nbsp;&nbsp;&nbsp;
&nbsp;<BR>
&nbsp;<BR>
&nbsp;<BR>&nbsp;&nbsp;&nbsp;&nbsp;<BR>&nbsp;<BR>--&nbsp;<BR>※&nbsp;来源:·BBS&nbsp;水木清华站&nbsp;bbs.net.tsinghua.edu.cn·[FROM:&nbsp;202.197.0.1]&nbsp;&nbsp;<BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?