⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 00000036.htm

📁 一份很好的linux入门资料
💻 HTM
字号:
<HTML><HEAD>  <TITLE>BBS水木清华站∶精华区</TITLE></HEAD><BODY><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER>发信人:&nbsp;fzhang&nbsp;(老铁),&nbsp;信区:&nbsp;Linux&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<BR>标&nbsp;&nbsp;题:&nbsp;Re:&nbsp;再论&quot;对linux的质量质疑&quot;&nbsp;<BR>发信站:&nbsp;BBS&nbsp;水木清华站&nbsp;(Fri&nbsp;Jul&nbsp;30&nbsp;22:05:49&nbsp;1999)&nbsp;<BR>&nbsp;<BR>【&nbsp;在&nbsp;nudtbegger&nbsp;(军人)&nbsp;的大作中提到:&nbsp;】&nbsp;<BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;异步IO最大的实现背景应该是网络应用吧,特别是SERVER(WEB,FTP,&nbsp;</I><BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;1等待多个事件的能力,SELECT是LINUX实现单线程对多请求的唯一方法,&nbsp;</I><BR>∶<I>&nbsp;(若不对,请指出)。系统用SELECT在事件到来(eg.当一个REQUEST到来时)&nbsp;</I><BR>∶<I>&nbsp;通知所有的等待同一事件的线程,但是却只有一个线程能处理。这样有几个&nbsp;</I><BR>∶<I>&nbsp;开销,1,唤醒的几个线程要同步,最后只能由一个线程来完成服务。2,有&nbsp;</I><BR>∶<I>&nbsp;不少线程本来只要睡眠就行,结果却被唤醒,虽然很快就又接着等待,但是&nbsp;</I><BR>∶<I>&nbsp;CPU时间又消耗不少。有了这两大限制,我的一个师兄告诉我说,一般都是&nbsp;</I><BR>∶<I>&nbsp;用一个线程守侯,当来了REQUEST,就通知另一个线程守侯,自己处理,或者&nbsp;</I><BR>∶<I>&nbsp;通知另一个线呈处理,自己接着守侯。这样仍然增加了开销。如果LINUX&nbsp;</I><BR>∶<I>&nbsp;象NT那样,提供能够只唤醒一个线程的函数,无疑将提高处理REQUEST的效率。&nbsp;</I><BR>Yes,&nbsp;it&nbsp;is&nbsp;true&nbsp;in&nbsp;Linux2.2,&nbsp;but&nbsp;will&nbsp;not&nbsp;in&nbsp;2.4(we&nbsp;can&nbsp;expect&nbsp;it&nbsp;this&nbsp;fall):&nbsp;<BR>The&nbsp;Linux&nbsp;model&nbsp;of&nbsp;network&nbsp;sockets&nbsp;is&nbsp;one&nbsp;common&nbsp;across&nbsp;most&nbsp;UNIX&nbsp;variants&nbsp;&nbsp;<BR>which&nbsp;adhere&nbsp;to&nbsp;the&nbsp;standards.&nbsp;This&nbsp;is&nbsp;not&nbsp;to&nbsp;say&nbsp;that&nbsp;the&nbsp;standard&nbsp;doesn't&nbsp;&nbsp;<BR>have&nbsp;some&nbsp;deficiencies.&nbsp;Under&nbsp;Linux&nbsp;2.2,&nbsp;if&nbsp;you&nbsp;have&nbsp;a&nbsp;number&nbsp;of&nbsp;processes&nbsp;&nbsp;<BR>all&nbsp;waiting&nbsp;on&nbsp;an&nbsp;event&nbsp;from&nbsp;a&nbsp;network&nbsp;socket&nbsp;(a&nbsp;web&nbsp;port,&nbsp;for&nbsp;instance)&nbsp;&nbsp;<BR>they&nbsp;will&nbsp;all&nbsp;be&nbsp;woken&nbsp;up&nbsp;when&nbsp;activity&nbsp;is&nbsp;detected.&nbsp;So,&nbsp;for&nbsp;every&nbsp;web&nbsp;page&nbsp;&nbsp;<BR>request,&nbsp;a&nbsp;number&nbsp;of&nbsp;web&nbsp;server&nbsp;processes&nbsp;will&nbsp;suddenly&nbsp;wake&nbsp;up&nbsp;and&nbsp;try&nbsp;and&nbsp;&nbsp;<BR>get&nbsp;at&nbsp;the&nbsp;request...&nbsp;only&nbsp;one&nbsp;will&nbsp;succeed.&nbsp;The&nbsp;losers&nbsp;of&nbsp;the&nbsp;herd&nbsp;will&nbsp;put&nbsp;&nbsp;<BR>themselves&nbsp;back&nbsp;to&nbsp;sleep&nbsp;and&nbsp;wait&nbsp;for&nbsp;the&nbsp;next&nbsp;connection.&nbsp;&nbsp;Linux&nbsp;is&nbsp;a&nbsp;terribly&nbsp;&nbsp;<BR>efficient&nbsp;system&nbsp;and&nbsp;manages&nbsp;to&nbsp;wake&nbsp;up&nbsp;all&nbsp;these&nbsp;processes,&nbsp;give&nbsp;the&nbsp;resource&nbsp;&nbsp;<BR>to&nbsp;one&nbsp;of&nbsp;them,&nbsp;and&nbsp;put&nbsp;the&nbsp;remainder&nbsp;back&nbsp;to&nbsp;sleep&nbsp;very&nbsp;quickly,&nbsp;however&nbsp;&nbsp;<BR>benchmarks&nbsp;have&nbsp;shown&nbsp;that&nbsp;we&nbsp;could&nbsp;be&nbsp;more&nbsp;efficient&nbsp;if&nbsp;we&nbsp;eliminated&nbsp;the&nbsp;&nbsp;<BR>&quot;stampede&nbsp;effect.&quot;&nbsp;Thus,&nbsp;the&nbsp;Linux&nbsp;minds&nbsp;cast&nbsp;about&nbsp;for&nbsp;a&nbsp;solution&nbsp;and&nbsp;decided&nbsp;<BR>&nbsp;to&nbsp;implement&nbsp;&quot;wake&nbsp;one&quot;&nbsp;under&nbsp;Linux.&nbsp;This&nbsp;change&nbsp;allows&nbsp;programs&nbsp;to&nbsp;let&nbsp;Linux&nbsp;<BR>know&nbsp;that&nbsp;they&nbsp;should&nbsp;be&nbsp;the&nbsp;only&nbsp;one&nbsp;to&nbsp;be&nbsp;woken&nbsp;up&nbsp;in&nbsp;the&nbsp;case&nbsp;of&nbsp;activity.&nbsp;&nbsp;<BR>It&nbsp;is&nbsp;expected&nbsp;that&nbsp;by&nbsp;the&nbsp;time&nbsp;Linux&nbsp;2.4&nbsp;ships,&nbsp;Apache&nbsp;and&nbsp;other&nbsp;similar&nbsp;se&nbsp;<BR>rvers&nbsp;will&nbsp;begin&nbsp;using&nbsp;this&nbsp;new&nbsp;functionality&nbsp;to&nbsp;increase&nbsp;the&nbsp;efficiency&nbsp;of&nbsp;&nbsp;<BR>what&nbsp;they&nbsp;do.&nbsp;&nbsp;&nbsp;<BR>&nbsp;<BR>∶<I>&nbsp;&nbsp;&nbsp;&nbsp;2异步IO的能力。真正的异步IO和非阻塞IO是不同的,LINUX下实现的就&nbsp;</I><BR>∶<I>&nbsp;是非阻塞IO。LINUX下一个网络线程执行了非阻塞IO读,从连接中读取CLIENT&nbsp;</I><BR>∶<I>&nbsp;的数据,但是,这时CLIENT的数据还未到,该线程可以执行其他的工作,但是,&nbsp;</I><BR>∶<I>&nbsp;该线程在数据到来时还要执行一次读,否则就得不到数据,如果不知道什么&nbsp;</I><BR>∶<I>&nbsp;时候数据能到,将循环等待。但是在真正的异步IO中,情况不是这样,线程&nbsp;</I><BR>∶<I>&nbsp;执行一条读后,就不要在读,系统在数据到来时会通知线程

⌨️ 快捷键说明

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