基于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服务器为例

)。

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

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

2NIO特性

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

图1

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

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

)。

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应用开发。

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

  1. 基于 Java NIO 实现简单的 HTTP 服务器

    1.简介 本文是上一篇文章实践篇,在上一篇文章中,我分析了选择器 Selector 的原理.本篇文章,我们来说说 Selector 的应用,如标题所示,这里我基于 Java NIO 实现了一个简单的 ...

  2. Netty精粹之JAVA NIO开发需要知道的

    学习Netty框架以及相关源码也有一小段时间了,恰逢今天除夕,写篇文章总结一下.Netty是个高效的JAVA NIO框架,总体框架基于异步非阻塞的设计,基于网络IO事件驱动,主要贡献在于可以让用户基于 ...

  3. JAVA NIO开发需要知道的Netty精粹

    Netty是个高效的JAVA NIO框架,总体框架基于异步非阻塞的设计,基于网络IO事件驱动,主要贡献在于可以让用户基于Netty提供的API快速开发高性能.高可靠性的网络应用.这篇文章主要是介绍Ne ...

  4. 并发型服务器响应方式,Java NIO 在并发型服务器设计中的应用.pdf

    Java NIO 在并发型服务器设计中的应用 丁辉 北京邮电大学PCN&CAD 中心,北京(100876 ) E-mail :lvsehaier@ 摘 要:本文分析了应用传统阻塞型网络I/O ...

  5. 基于Java NIO的Socket通信

    基于Java NIO的Socket通信 Java NIO模式的Socket通信,是一种同步非阻塞IO设计模式,它为Reactor模式实现提供了基础. 下面看看,Java实现的一个服务端和客户端通信的例 ...

  6. 基于java nio的memcached客户端——xmemcached

    1.xmemcached是什么? xmemcached是基于java nio实现的memcached客户端API. 实际上是基于我实现的一个简单nio框架 http://code.google.com ...

  7. java源码聊天软件_【原创】基于Java NIO的多人在线聊天工具源码实现(登录,单聊,群聊)...

    近来在学习Java NIO网络开发知识,写了一个基于Java NIO的多人在线聊天工具MyChat练练手.源码公开在Coding上: 编写一个基于Java NIO的多人在线聊天工具,需要以下几方面的知 ...

  8. OpenJWeb(v1.9)企业级信息化应用平台开源版发布公告(基于Java语言开发)

              OpenJWeb(v1.9) 企业级信息化应用平台 开源版发布公告 (基于Java语言开发)     软件开发人员的创业伴侣.架构参考 软件外包公司的二次开发利器 Java培训机构 ...

  9. java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台

     详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘   ...

最新文章

  1. 听妈妈的话-07年感动的延续
  2. 服务器状态监控之一背景介绍及解决方案建议
  3. dataset__getitem___一文弄懂Pytorch的DataLoader, DataSet, Sampler之间的关系
  4. Django forms组件
  5. hdu-1114 Piggy-Bank
  6. 玩大数据期间碰到的一些问题总结
  7. python开两个守护线程_python 守护线程
  8. for循环和while循环
  9. java:Eclipse插件springsource-tool-suite的下载和安装
  10. JavaScript学习(二十七)—解决IE以及IE8之前的浏览器下面的添加事件或者删除事件
  11. UVa 10400 记忆化搜索
  12. Ubuntu16.04运行清空文件命令时提示权限不够解决方法
  13. Jmeter 接口自动化执行报错 无法找到类或者类的方法
  14. ThinkPad R400 T400 详细拆机图解超精华
  15. 数分笔记整理22 - 数据处理项目 - 中国姓氏排行研究 房价影响因素挖掘
  16. gprs信息上传服务器,车载GPS GPRS数据上传 源码带注释
  17. 关键词优化推广需要怎么做?有哪些方法和技巧
  18. TweenMax学习笔记整理
  19. 比特大陆之争终落幕,吴忌寒为爱和平退出?
  20. 小程序支持主体迁移了

热门文章

  1. 1、S32K14X学习笔记(一)--S32K汽车MCU资源总结
  2. 会计电算化什么是计算机硬件,2008年初级会计职称:会计电算化计算机的硬件...
  3. 2023最新匿名短信一封来信系统源码V3.0版+功能很完善
  4. 【概率】重复投掷一枚质地均匀的硬币,出现连续“XXX”即停止,求期望投掷的次数
  5. 论信息系统项目风险管理
  6. 杰夫•贝索斯收购《华盛顿邮报》:不是一笔生意,是一种文化的表现
  7. 为什么要搭建独立商城系统,这7个理由说明一切
  8. 什么是主机安全,如何保障自己的主机安全
  9. 鲁迅美术学院考计算机几级,鲁迅美术学院英语四级考试科目安排2020年上半年...
  10. 解决:_pickle.UnpicklingError: A load persistent id instruction was encountered,