WEB开发网      濠电姷鏁告繛鈧繛浣冲洤纾瑰┑鐘宠壘閻ょ偓銇勯幇鍫曟闁稿鍠愰妵鍕冀閵娧佲偓鎺楁⒒閸曨偄顏柡宀嬬畱铻e〒姘煎灡绗戦梻浣筋嚙濮橈箓顢氳濠€浣糕攽閻樿宸ュΔ鐘叉啞缁傚秹宕滆绾惧ジ寮堕崼娑樺缂佹宀搁弻鐔风暋閻楀牆娈楅梺璇″枓閺呯姴鐣疯ぐ鎺濇晝闁靛牆妫欓蹇旂節閻㈤潧浠﹂柛銊ョ埣楠炴劙骞橀鑲╋紱闂佽宕樼粔顔裤亹閹烘挸浜归梺缁樺灦閿曗晛螞閸曨垱鈷戦柟鑲╁仜婵″ジ鎮楀☉鎺撴珖缂侇喖顑呴鍏煎緞濡粯娅囬梻浣瑰缁诲倿寮绘繝鍥ㄦ櫇闁稿本绋撻崢鐢告煟鎼淬垻鈯曢柨姘舵煟韫囥儳绋荤紒缁樼箖缁绘繈宕橀妸褌绱濋梻浣筋嚃閸ㄤ即宕弶鎴犳殾闁绘梻鈷堥弫鍌炴煕閳锯偓閺呮瑧妲愬Ο琛℃斀闁绘劕妯婇崵鐔封攽椤旇棄鍔ら摶鐐烘煕閺囥劌澧柛娆忕箻閺屽秹宕崟顒€娅g紓浣插亾濠㈣泛顑囩粻楣冩煙鐎涙ḿ绠橀柨娑樼У椤ㄣ儵鎮欓鍕紙闂佽鍠栫紞濠傜暦閹偊妲诲┑鈩冨絻椤兘寮诲☉銏犖╅柕澶堝労閸斿绱撴担绋库偓鍝ョ矓瑜版帒鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘 ---闂傚倸鍊烽悞锔锯偓绗涘厾娲煛閸涱厾顔嗛梺璺ㄥ櫐閹凤拷
开发学院操作系统Linux/Unix 在 AIX 上通过 pollset 接口实现高效的 I/O 阅读

在 AIX 上通过 pollset 接口实现高效的 I/O

 2009-09-05 00:00:00 来源:WEB开发网 闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�闂傚倸鍊风粈渚€骞夐敓鐘插瀭闁汇垹鐏氬畷鏌ユ煙閹殿喖顣奸柛搴$У閵囧嫰骞掗幋婵冨亾閻㈢ǹ纾婚柟鐐灱濡插牊绻涢崱妤冃℃繛宀婁簽缁辨捇宕掑鎵佹瀸闂佺懓鍤栭幏锟�濠电姷鏁告慨顓㈠箯閸愵喖宸濇い鎾寸箘閹规洟姊绘笟鈧ḿ褍煤閵堝悿娲Ω閳轰胶鍔﹀銈嗗笂閼冲爼鍩婇弴銏$厪闁搞儮鏅涙禒褏绱掓潏鈺佷槐闁轰焦鎹囬弫鎾绘晸閿燂拷闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�  闂傚倸鍊烽懗鑸电仚缂備胶绮〃鍛村煝瀹ュ鍗抽柕蹇曞У閻庮剟姊虹紒妯哄闁圭⒈鍋嗛惀顏囶樄闁哄本娲樼换婵婄疀閺囩姷鐛ラ梻浣哄帶婢瑰﹥绂嶅⿰鍫氣偓鏃堝礃椤忎礁浜鹃柨婵嗛婢ь喖霉閻樻瑥瀚粻楣冩煕椤愩倕鏋庨柣蹇嬪劜閵囧嫰寮村Ο鍝勫Е濡炪們鍨洪悷鈺呭箖閳╁啯鍎熼柕鍥у簻閹凤拷
核心提示: 当一个文件描述符上数据准备好时,它无法立即响应,在 AIX 上通过 pollset 接口实现高效的 I/O(2), 在多任务系统上尤其应该避免这种忙 - 等待 polling 方法,为了解决这些问题,然后,选择器把通道和感兴趣的操作复制到内核空间,UNIX® System SVR3 上引

当一个文件描述符上数据准备好时,它无法立即响应。

在多任务系统上尤其应该避免这种忙 - 等待 polling 方法。

为了解决这些问题,UNIX® System SVR3 上引入了一个 poll() API,它已经成为 POSIX 标准的一部分。简单地说,应用程序向内核提供一个文件描述符列表和一个超时值,它需要监视这些文件描述符的读 / 写 / 错误状态。内核向相关设备的选择函数注册这个进程 / 线程,并让这个进程 / 线程睡眠。当相关设备准备好或计时器过期时,内核唤醒注册的进程 / 线程。这种方法会显著降低 I/O 开销;它消除了内核和用户空间之间的大量系统调用和数据复制。另外,应用程序可以立即响应 I/O 事件。

Java NIO 库引入了一个 “选择器” 类,用于从 Java 应用程序支持这个 API。任何 Java 应用程序都可以通过 open() 调用打开一个选择器以获取相关联的数据结构,见 清单 2。

清单 2. 如何获取选择器对象

    
 Selector selector = Selector.open(); 

然后,应用程序用 register () 调用向选择器注册通道(文件描述符)和感兴趣的操作。例如,如果应用程序希望知道某一通道什么时候准备好读取,可以向选择器注册这个文件描述符并指定读操作,见 清单 3。

清单 3. 向选择器注册通道

    
 channel.register(selector, SelectionKey.OP_READ); 

图 1. 传统的 poll() 方式

在 AIX 上通过 pollset 接口实现高效的 I/O

如 图 1 所示,选择器在内部保存这些详细信息,直到应用程序在选择器上调用 select() 方法,见 清单 4。然后,选择器把通道和感兴趣的操作复制到内核空间,让内核为这个应用程序执行实际的 poll。

上一页  1 2 3 4 5 6 7  下一页

Tags:AIX 通过 pollset

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接