BBS水木清华站∶精华区
发信人: fzhang (老铁), 信区: Linux
标 题: Re: 再论"对linux的质量质疑"
发信站: BBS 水木清华站 (Fri Jul 30 22:05:49 1999)
【 在 nudtbegger (军人) 的大作中提到: 】
∶ 异步IO最大的实现背景应该是网络应用吧,特别是SERVER(WEB,FTP,
∶ 1等待多个事件的能力,SELECT是LINUX实现单线程对多请求的唯一方法,
∶ (若不对,请指出)。系统用SELECT在事件到来(eg.当一个REQUEST到来时)
∶ 通知所有的等待同一事件的线程,但是却只有一个线程能处理。这样有几个
∶ 开销,1,唤醒的几个线程要同步,最后只能由一个线程来完成服务。2,有
∶ 不少线程本来只要睡眠就行,结果却被唤醒,虽然很快就又接着等待,但是
∶ CPU时间又消耗不少。有了这两大限制,我的一个师兄告诉我说,一般都是
∶ 用一个线程守侯,当来了REQUEST,就通知另一个线程守侯,自己处理,或者
∶ 通知另一个线呈处理,自己接着守侯。这样仍然增加了开销。如果LINUX
∶ 象NT那样,提供能够只唤醒一个线程的函数,无疑将提高处理REQUEST的效率。
Yes, it is true in Linux2.2, but will not in 2.4(we can expect it this fall):
The Linux model of network sockets is one common across most UNIX variants
which adhere to the standards. This is not to say that the standard doesn't
have some deficiencies. Under Linux 2.2, if you have a number of processes
all waiting on an event from a network socket (a web port, for instance)
they will all be woken up when activity is detected. So, for every web page
request, a number of web server processes will suddenly wake up and try and
get at the request... only one will succeed. The losers of the herd will put
themselves back to sleep and wait for the next connection. Linux is a terribly
efficient system and manages to wake up all these processes, give the resource
to one of them, and put the remainder back to sleep very quickly, however
benchmarks have shown that we could be more efficient if we eliminated the
"stampede effect." Thus, the Linux minds cast about for a solution and decided
to implement "wake one" under Linux. This change allows programs to let Linux
know that they should be the only one to be woken up in the case of activity.
It is expected that by the time Linux 2.4 ships, Apache and other similar se
rvers will begin using this new functionality to increase the efficiency of
what they do.
∶ 2异步IO的能力。真正的异步IO和非阻塞IO是不同的,LINUX下实现的就
∶ 是非阻塞IO。LINUX下一个网络线程执行了非阻塞IO读,从连接中读取CLIENT
∶ 的数据,但是,这时CLIENT的数据还未到,该线程可以执行其他的工作,但是,
∶ 该线程在数据到来时还要执行一次读,否则就得不到数据,如果不知道什么
∶ 时候数据能到,将循环等待。但是在真正的异步IO中,情况不是这样,线程
∶ 执行一条读后,就不要在读,系统在数据到来时会通知线程�
中断吗?那是异步驱动的,Linux不也可以吗?
但操作系统可以使得用户程序具有阻塞语义的
�
∶ 大家都熟知WAITMULTIOBJECT和GETOVLAPPED函数,我就不多说了。
∶ 3长时间以来,我个人感觉就是LINUX的重入性不好,当然,很多人都告诉
∶ 我说要用发展的眼光看问题,但是,我觉得还是发展的太慢。重入性不好带
∶ 来的直接问题就是多处理器解决不好,这个问题LINUX社区都已经承认,我
∶ 不再多说。我只加一条NT的例子。NT4的写函数在网络IO中只有很少的在
∶ 网卡driver的函数不可重入,但是,就是这个问题,使的NT在4处理器的SERVER
∶ 中和SOLARIS相比处于下风,MS迅速的推出了SP4,和NT2000,解决了这个问题。
真有要求的话,Linus推出的会更快的
∶ LINUX的目标,我个人的看法是LINUX肯定是想在大型服务器上和其他OS
∶ 竞争的,但是就LINUX目前的状态,还无法和NT和SUNOS相比。PC WEEK做
∶ 的NT VS LINUX,当在多CPU,多网卡的情况下,LINUX根本不能和NT比,
∶ 在IT发展如此迅猛的今天,MS的做法是把资源耗光,这样,硬盘,
∶ 内存发展迅猛,才会如此的便宜,如果NT2000早点推出,现在也许还要更便宜。
这倒是,操作系统变化挺快的,但NT太笨重了,跟不上吧,NT2000怕要难产
--
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 162.105.138.50]
BBS水木清华站∶精华区