WEB开发网
开发学院操作系统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

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