在 aix 上通过 pollset 接口实现高效的 i-o

在 aix 上通过 pollset 接口实现高效的 i-o

ID:21268939

大小:67.00 KB

页数:7页

时间:2018-10-20

在 aix 上通过 pollset 接口实现高效的 i-o_第1页
在 aix 上通过 pollset 接口实现高效的 i-o_第2页
在 aix 上通过 pollset 接口实现高效的 i-o_第3页
在 aix 上通过 pollset 接口实现高效的 i-o_第4页
在 aix 上通过 pollset 接口实现高效的 i-o_第5页
资源描述:

《在 aix 上通过 pollset 接口实现高效的 i-o》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、在AIX上通过pollset接口实现高效的I/O  简介  JDK1.4引入的neChannel channel1 = DatagramChannel.open();   channel1.configureBlocking(false);   如果有数据,就读取并处理数据。如果没有数据可读,read调用立即返回。然后,对另一个文件描述符重复这个过程。在等待一段时间之后,重新开始,重复读取每个文件描述符。这种方法称为忙-等待poll。  poll方法:传统的I/O多路复用方式  由于以下两个问题,忙-等待polling方法会对效率造成严重影响:  当给

2、定的文件描述符上没有数据可读时,它会反复执行read()系统调用,这会浪费大量CPU周期。编缉推荐阅读以下文章AIX使用异步I/O(aio)提高系统性能使用NIM备份和恢复虚拟I/O服务器(VIOS)AIX系统磁盘I/O性能评估  当一个文件描述符上数据准备好时,它无法立即响应。  在多任务系统上尤其应该避免这种忙-等待polling方法。  为了解决这些问题,UNIX®SystemSVR3上引入了一个poll()API,它已经成为POSIX标准的一部分。简单地说,应用程序向内核提供一个文件描述符列表和一个超时值,它需要监视这些文件描述符的读/

3、写/错误状态。内核向相关设备的选择函数注册这个进程/线程,并让这个进程/线程睡眠。当相关设备准备好或计时器过期时,内核唤醒注册的进程/线程。这种方法会显著降低I/O开销;它消除了内核和用户空间之间的大量系统调用和数据复制。另外,应用程序可以立即响应I/O事件。  JavaNIO库引入了一个选择器类,用于从Java应用程序支持这个API。任何Java应用程序都可以通过open()调用打开一个选择器以获取相关联的数据结构,见清单2。  清单2.如何获取选择器对象     Selector selector = Selector.open();   然后,应

4、用程序用register()调用向选择器注册通道(文件描述符)和感兴趣的操作。例如,如果应用程序希望知道某一通道什么时候准备好读取,可以向选择器注册这个文件描述符并指定读操作,见清单3。  清单3.向选择器注册通道     channel.register(selector, SelectionKey.OP_READ);   图1.传统的poll()方式  如图1所示,选择器在内部保存这些详细信息,直到应用程序在选择器上调用select()方法,见清单4。然后,选择器把通道和感兴趣的操作复制到内核空间,让内核为这个应用程序执行实际的poll。编缉推荐阅

5、读以下文章AIX使用异步I/O(aio)提高系统性能使用NIM备份和恢复虚拟I/O服务器(VIOS)AIX系统磁盘I/O性能评估  清单4.如何启动poll     channel.register(selector, SelectionKey.OP_READ);    select()调用返回一个文件描述符列表,对于每个文件描述符至少注册了一个事件。然后,应用程序只能对这些文件描述符执行I/O操作。这种方法会消除内核和用户空间之间的大量系统调用和数据复制,从而显著降低开销。  选择器在内部调用一个本机poll()函数(见清单5),这个函数支持在一组文

6、件描述符上多路复用输入和输出:  清单5.poll()API的签名     int poll(struct pollfd fds[], nfds_t nfds, int timeout);    pollset方法:AIX解决poll()/select()可伸缩性问题的方法  但是,传统的1234下一页——感谢阅读这篇文章,..,poll方法有可伸缩性问题;它不太适合处理大量文件描述符。根本问题是,随着文件描述符数量的增加,每个poll操作所需的工作量会线性增加。为了提高可伸缩性,已经提出了许多新的API,比如/dev/poll、实时信号、I/O完成端

7、口、/dev/epoll和内核队列。对于哪个API是最好的长期解决方案,有许多争论(见[POLLCMP])。  poll()的哪些方面影响可伸缩性?  每个poll()调用都提供要poll的文件描述符列表。对于每个调用,都要把这个列表复制到内核空间中。图1中红色的事件表示这些重复的复制。  poll一个对象需要两步:首先在文件描述符上建立一个持有计数,然后调用与这个文件描述符相关联的操作。  异步和同步poll之间的主要路径长度差异是,分配和最终清除控制块。  作为poll操作的最后一步,要清除所有控制块。必须从与块相关联的对象中删除每个控制块。这要求

8、poll方法锁住对象。编缉推荐阅读以下文章AIX使用异步I/O(aio)提高系统性能使用NIM

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。