文档详情

flex与JAVA开发指南.pdf

发布:2017-06-30约2.07万字共18页下载文档
文本预览下载声明
http :// Cindy User Guide 版本号 修改时间 修改人 备注 1.0 2005-03- 12 Roger Chen Based on Cindy-2.3 RC 2.0 2006-03-02 Roger Chen Based on Cindy-3.0 a3 http :// Cindy 简介 Cindy 是一个基于Java NIO 的异步I/O 框架,支持TCP、UDP 以及Pipe ,为应用提供 了一个统一的模型,并能够方便的切换异步和同步操作。 为什么不使用Java IO? Java IO 包采用阻塞模型来处理网络操作。假设应用调用了read 方法读取来自网络流上 的数据,而数据尚未到达本机,则对read 方法的调用将一直等到数据到达并成功接收后才 返回。由于IO 包的所有操作会一直阻塞当前线程,为了不影响其他事务的处理,在一般情 况 应用总是会用一个独立线程或线程池来处理这些I/O 操作。 Java IO 包阻塞模型的优点就 非常简单易用,如果配合上线程池,效率也非常不错, 所以得到了广泛的应用。但这种简单模型也有其固有的缺点:扩展性不足。如果应用只需要 进行少量的网络操作,那么开启若干个单独的I/O 线程无伤大雅;但 如果 实现一个服务 端的应用,需要同时处理成千上万个网络连接,采用阻塞模型的话就要同时开启上千个线程。 虽然现在强劲的服务器能够负担起这么多线程,但操作系统花在线程调度上的时间也会远远 多于用于处理网络操作上的时间。 为什么要使用Java NIO? 采用IO 包的阻塞模型,如果数据量不大的话,则线程的大部分时间都会耗费在等待上。 对于希缺的服务器资源而言,这是一种极大的浪费。 在Java 1.4 中引入的NIO 包里,最引人注 的就 加入了非阻塞I/O 。和IO 包提供的 阻塞模型不同的 ,对一个非阻塞的连接进行操作,调用会立即返回,而不是等待。假设应 用调用了read 方法读取来自网络流上的数据,而数据尚未到达本机,则对read 方法的调用 将立即返回,并通知应用 前只能读到0 个字节。应用可以根据自身的策略来进行处理,比 如读取其他网络连接的数据等等,这就使得一个线程管理多个连接成为可能。 NIO 包还引入了Selector 机制,将一个非阻塞连接注册在Selector 上,应用就不需去轮 询该连接当前 否可以读取数据,而 接收到数据后Selector 会通知该连接。这样就使得可 以用更少的线程数来管理更多的连接。 为什么选择Cindy,而不直接使用NIO? Java NIO 包虽然提供了非阻塞I/O 模型,但是直接使用NIO 的非阻塞I/O 需要成熟的网 http :// 络编程经验,处理众多底层的网络异常,以及维护连接状态,判断连接超时等等。对于关注 于其业务逻辑的应用而言,这些复杂性都是不必要的。不同Java 版本的NIO 实现也会有一 些Bug ,Cindy 会巧妙的绕开这些已知的Bug 并完成相应功能。并且NIO 本身也在不断发 展中,Java 1.4 的NIO 包中只实现了TCP/UDP 单播/Pipe ,Java 5.0 中引入的SSLEngine 类 使得基于非阻塞的流协议(TCP/Pipe )支持 SSL/TLS 成为可能,在未来的版本中还可能会 加入非阻塞多播的实现。Cindy 会关注这些新功能,并纳入到统一的框架中来。 而且Cindy 虽然 前的实现是基于NIO ,但它会不仅仅局限于NIO 。等到一些基于操作 系统本身实现的AIO (Asynchronous IO )类库成熟后,它也会加入对这些类库的支持,通 过操作系统本身实现的AIO 来提高效率。 如果应用程序只想使用一种高效的模型,而不想关心直接使用NIO 所带来的这些限制, 或希望将来无需更改代码就切换到更高效率的AIO 实现上,那么 Cindy 会是一个很好的选 择。并且使用Cindy,应用可以在同步和异步之间进行无缝切换,对于大部分操作是异步, 可某些特殊操作需要同步的应用
显示全部
相似文档