📄 00000029.htm
字号:
<HTML><HEAD> <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人: nudtbegger (军人), 信区: Linux <BR>标 题: Re: 关于LINUX的质量质疑 <BR>发信站: BBS 水木清华站 (Thu Jul 29 13:05:39 1999) WWW-POST <BR> <BR>【 在 mephisto (魔鬼*修心养性*重新做人) 的大作中提到: 】
<BR>∶<I> 5000p/s 是在计费的采集上,没有那么小的包.
</I><BR>但是,就是包大一点,也远不到100M呀
<BR>∶<I> 100M是用两台host ping -f 来测的,因为有碰撞,到底有多少包没有参考标准,
</I><BR>∶<I> 是通过以ping方接受到和发送的包来算出包书目的上限,采集很靠近这个上限
</I><BR>∶<I> 我没有试过. > 50% < 90% ?
</I><BR>
<BR>理论上,一台发,一台受,假使每个包是64BYTE,那么,发一个包要512位时,
<BR>包间隙512位时,由于无碰撞,所以是50M,如果包大,那么可以接近100M,
<BR>100*1518/(1518+64)
<BR>
<BR>∶<I> 10ms包括了切换.
</I><BR>∶<I> 这个不能一下子说清楚. RT 有实时部份和非实时的部分.看你需求是如何产生的
</I><BR>∶<I> 不对. It depends. The IRQ respons have two part. the top half and the
</I><BR>∶<I> buttom half. The top half is short and not interruptable. The buttom half
</I><BR>∶<I> is long. I don't beleive OS do not have not interruptable part.
</I><BR>∶<I> Linux的提法不一样,我看功能是一样的. select()
</I><BR>
<BR>你说的是SELECT呀,关于SELECT,我想多说两句,这两天我特地回去看了看LINUX 里异
<BR>步IO到底是怎么回事。在一个师兄的帮助下翻了翻SOURCE,就一些问题向他请教了一下。 <BR>
<BR>后来我发现情况似乎不是很好,select是LINUX里主要支持异步
<BR>IO的API(若不对,请指正),如果要在一个现程里等待多个CLIENT的连接,更是
<BR>只有用它(也许是我孤陋寡闻)但是SELECT的实现方法简直是愚笨之极(个人看法),让 <BR>
<BR>我这等在WIN32下享受了好处的人简直不能相信。
<BR>下面我慢慢谈谈我个人的一些看法。
<BR>什么时候我们要用异步IO?因为多现程的使用,原有的一些背景已经不存在了,你完全可 <BR>以
<BR>另开一个现程去执行那个费事的IO,而且,如果象DISK IO,因为完成时间可预测,而且 <BR>
<BR>次数不会太多,发生也是可预测的,所以,如果你不想用异步IO,用多现程的方法是可以 <BR>
<BR>很好的解决这个问题的。在目前而言,异步IO的主要使用背景在于网络应用,而且是象
<BR>数据采集(本人对此很有兴趣),SERVER等数据量不可预测,BRUST流量大的应用。
<BR>比如说,在LINUX下做一个SERVER(WEB,FTP,TELNET ETC),我想没有人会同意对每
<BR>个连接都创建一个线程的苯方法吧?(创建一个进程更不在考虑之列)这样做,当然可
<BR>行,而且如果只有10个连接,只在自己实验机房,只有10台PC,当然没问题。但是,这个 <BR>
<BR>方法显然太浪费资源,很难想象如果有一千人的同时连接会发生什么。首先是现程太多, <BR>
<BR>其次是CPU要花更多的时间去管理线程,还有就是编程者要用到更多的同步信号等核心对 <BR>象。
<BR>于是,我们想到了异步IO,我们不用一个连接对于一个线程,可以一个线程对应多个连接 <BR>。
<BR>线程发出异步IO后,只要等待事件就行了。但是SELECT有一个大问题在于,当事件到来时 <BR>,
<BR>系统通知所有的等待该事件的线程,但是,事实却是,当来了一个新的连接时,只有一个 <BR>
<BR>现程有必要被唤醒,其余的线程只有回到等待状态。这种实现方式将带来两大开销,第一 <BR>,
<BR>所有的线程都被唤醒,到底哪一个去完成服务呢?在线程中要协调。第二,线程被唤醒了 <BR>,
<BR>CPU又要分配时间给该线程,虽然它马上就又进入等待状态。可是该线程本不该被唤醒的 <BR>。
<BR>这样一来,一个WEB SERVER的设计只好采用老套路,一个线程守着,当CLIENT来的时候, <BR>
<BR>它自己处理,同时唤醒或产生另外一个线程来守侯。或者当CLIENT来的时候,它自己不处 <BR>理,
<BR>唤醒或产生一个线程来处理,自己仍然守侯。这种情况还是会带来一些开销,因为每当一 <BR>个
<BR>CLIENT REQUEST到来的时候,守侯线程接到了请求,却要通知别的线程。
<BR>如果是在NT下,完全没有必要如此麻烦,NT里的同样情况,系统只要唤醒一个线程,尽管 <BR>有多
<BR>个线程在等待同一个事件。NT下大家都很熟,相信大家不用我多说。
<BR>
<BR>关于SELECT的缺陷,先就敲到这里了,还有些话,还要把代码翻出来,再考虑考虑再说。 <BR>
<BR>
<BR>另外,由于小弟我对LINUX实在是不太熟,属于初通皮毛的那种,才一级无,但是刚刚从 <BR>
<BR>0级伸到1级,心情还是激动的。请各位高级玩家指正帮助。
<BR>
<BR>
<BR>
<BR>∶<I> 不是发信号,是把进程叫醒
</I><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 + -