并发型服务器响应方式,基于Java NIO 开发高性能并发型服务器程序的研究

基于Java NIO 开发高性能并发型服务器程序的研究

第8卷%第5期

软件导刊

2009年5月SoftwareGuide

Vol.8No.5May.2009

基于JavaNIO开发高性能并发型服务器程序的研究

段艳明,肖辉辉

(河池学院计算机与信息科学系,广西宜州546300)

要:分析了应用传统阻塞型网络I/O在进行服务器程序设计时的不足,在此基础上研究了非阻塞型网络I/O

(NIO)的特性以及工作机制,给出了应用NIO设计高性能并发型服务器程序核心代码,以实现服务器与客户端无阻

塞的、流畅的数据读写。

关键词:网络通信;阻塞;非阻塞;NIO;Java中图分类号:TP312

文献标识码:A

文章编号:1672-7800(2009)05-0063-03

1传统阻塞型网络I/O的不足

但是,随着同时连接的客户端数量的增加,系统中将存在大量的用于同客户端进行交互的线程。每个线程都需要较多的系统资源(内存、栈、CPU等),在不同的线程之间切换上下文(Con-

Java平台传统的I/O系统都是基于Byte(字节)和Stream(数据流)的,相应的I/O操作都是阻塞型的,所以服务器程序也采用阻塞型I/O进行数据的读、写操作。其操作模式如图1所示(以TCP服务器为例

1-403-png_6_0_0_189_579_113_145_900.449_1179.9-313-0-312-313.jpg

)。

text)是一个比较费时的操作,频繁的线程操作将会造成系统性

能急剧下降。如果用这样的模型建立一个服务器端,一个连接至少2个线程,如果业务负担很大、连接的socket很多的话,会带来相当大的开销、而且扩展性很差。因此,这种模式在客户端增加时,性能将下降得非常快。

2NIO特性

针对传统I/O系统工作模式的弊端,JavaNIO通信机制的构建采用了基于Buffers(缓冲区)、Channels(通道)和Selectors(选择器)的新模式。

图1

基于阻塞I/O的单线程TCP服务器

图1中,粗框所表示的操作即为阻塞操作,服务器对这些操作的调用将一直阻塞,直到资源可以得到。对于这种基于阻塞I/O开发的网络应用程序,一个常用的改进方法就是开设多线程,让线程去处理阻塞操作,其操作模式如图2所示(以TCP服务器为例

1-456-png_6_0_0_136_853_218_164_900.449_1179.9-605-0-1060-605.jpg

)。

JavaNIO的主要类为:

Buffer(缓冲器):Buffer是抽象类,它及其派生出的"子类",

用以处理各种类型数据的读写以及相关的运算。每一缓冲器内部包含一个字节数组作为数据存储,实现数据的管理和运算,并控制操作系统的读写过程。

Channel(通道):Channel是一个接口,功能类似于传统I/O

中的Stream,但通道具有双向性,既可读入,也可写出。

Selector(选择器):各类Buffer是数据的容器对象。各类Channel实现在各类Buffer与各类I/O服务间传输数据。而Selector,负责监视已注册的Sockets通道,提供各类Channel的

状态信息,并序列化服务器需要应答的请求,控制着各类

Channel有效地工作。

Buffers、Channels和Selectors是组成NIO的三个重要部

图2

基于阻塞I/O的多线程TCP服务器

分,是三类新的抽象模型。它们提供了非阻塞套接字、就绪选择、文件锁定和内存映射文件等新的I/O能力。还提供了正则

图2中使用多线程,使得服务器可以并发处理多个请求。

作者简介:段艳明(1978-),女,河池学院计算机与信息科学系讲师,研究方向为计算机网络、人工智能;肖辉辉(1977-),男,江西永新人,江西理工

大学硕士研究生,河池学院计算机与信息科学系讲师,研究方向为GML空间数据库理论与应用、数据库技术、GIS应用开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值