Java网络编程从入门到精通(31):非阻塞I/O简介

  • 时间:
  • 浏览:0

本文为原创,如需转载,请注明作者和出处,谢谢!

当然,可不前要使用应用进程池(将在第三每种讲解)来缓解服务器的压力,但这从非要外理客户端因访问过于密集而造成的服务器拒绝响应的问題。觉得在服务端还有请求缓冲区作为保障,但三种缓冲区的大小是有限的(一般为500),可能性客户端的请求数远超过三种数,客户端还是会收到拒绝服务的信息。

在里边亲戚亲戚大伙了解了那些是同步I/O。而非阻塞I/O和同步I/O最明显的不同有之前 同步I/O所有可能性被阻塞的地址在非阻塞I/O中也有会被阻塞。如在读取数据时,可能性数据暂时无法被读取。没办法 在非阻塞I/O中会立刻返回,以便应用进程可不前要执行三种的代码,有之前 系统会不断侦测三种未完成的读取操作,直到可不前要继续读数据时再来完成三种操作。

在三种情况下,使用非阻塞I/O就可不前要外理三种问題。可能性使用非阻塞I/O的应用进程一般是单应用进程的(有时可能性将使用非阻塞I/O的应用进程段装入去有4个 单独的应用进程里,而主应用进程负责外理用户的输入),有之前 ,服务端接收的客户端请求数从不随着工作应用进程数的增加而增加。三种三种使用非阻塞I/O模式就不不受到操作系统对应用进程总数的限制,有之前 会占用极少量的服务器资源。

2. 在听候超时时间后,抛出了超时异常。

二、为那些要使用非阻塞I/O

在前面老是将非阻塞I/O和网络应用装入去一并讲。觉得非阻塞I/O从不等于网络。亲戚亲戚大伙也可不前要将非阻塞I/O应用到非网络的应用中,如文件复制。可能性同步I/O是基于字节流的,而非阻塞I/O是基于缓冲区和通道的。有之前 ,从理论上,所操作的文件越大,非阻塞I/O的优势越能体现出来。而对于比较小的文件操作,三种种生活法子的波特率差太满。根据实验得知,复制有4个 4G左右的文件,一般情况下,非阻塞I/O法子比同步I/O法子快大慨15%左右。

下一篇:

一、那些是非阻塞I/O

非阻塞I/O觉得可不前要到达在外理极少量客户端请求的一并,又不占用极少量的服务器资源的目的。但三种通讯法子从非要完整性取代同步I/O。如非阻塞I/O从不适合象FTP服务器那样前要保持连接情况的应用(愿因将在以前的章节中说明)。非阻塞I/O一般应用在服务端比较多三种,可能性客户端一般从不前要外理极少量的连接(但三种应用除外,如象百度、GoogleWeb Spider,前要一并下载多个网页,这时就前要在客户端建立极少量的连接来满足需求),而服务端应用进程一般前要接收并外理极少量的客户端请求,有之前 ,就前要使用多应用进程(使用同步I/O)或非阻塞I/O来达到三种目的。可能性某个服务端应用外理的客户端请求没没办法 多时,使用多应用进程和同步I/O可能性会更好三种,可能性三种法子要比非阻塞I/O法子更灵活。

1. 连接服务器、读写数据或听候客户端请求正常地执行。

在使用同步I/O的网络应用中,可能性要一并外理多个客户端请求,或是在客户端要一并和多个服务器进行通讯,就前要使用多应用进程来外理。也有之前 说,将每有4个 客户端请求分配给有4个 应用进程来单独外理。没办法 做觉得可不前要达到亲戚亲戚大伙的要求,但一并又会带来另外有4个 问題。可能性每创建有4个 应用进程,就要为三种应用进程分配一定的内存空间(也叫工作存储器),有之前 操作系统三种生活也对应用进程的总数有一定的限制。可能性客户端的请求太满,服务端应用进程可能性会可能性不堪重负而拒绝客户端的请求,甚至服务器可能性会有之前 而瘫痪。

亲戚亲戚大伙可不前要将同步I/O称为阻塞I/O,非阻塞I/O称为异步I/O。在本书中采用了比较常用的叫法:同步I/O和非阻塞I/O。觉得它们的叫法不同,但含义是一样的。读者在阅读三种书时应注意这三种。

在讲解那些是非阻塞I/O以前,首先应了解那些是同步I/O,这里的同步指的是那些。同步三种概念在应用进程设计中主有之前 指代码按顺序执行的过程。如在Java应用进程中的main法子,可能性不使用多应用进程,三种法子中的代码一定是没办法 往后按顺序执行的。这就叫做同步。可能性使用了多应用进程,从宏观淬硬层 来看会有不同的代码段一并执行,这就叫做异步。在同步I/O中的同步概念也这俩,也有之前 说,在I/O通讯过程中,非要之前 某一步的通讯未以前开使英语 ,就无法进行三种的通讯。没办法 这里的同步指的是那些呢?要回答三种问題以前,首先让亲戚亲戚大伙先回忆一下,在网络通讯富含那些地方可能性会被阻塞。可能性读者看到前面的章节就会知道答案。对于客户端来说,有有4个 地方可能性会被阻塞:连接服务器(调用connect法子时)和读写数据。而在服务端也有有4个 地方可能性会被阻塞:听候客户端请求(调用accept法子时)和读写数据(在一般情况下,写数据不不被阻塞,但可能性网络环境比较差的以前,客户端和服务端的写数据操作也可能性存在阻塞问題)。也有之前 说,可不前要设置超时时间的地方就可能性被阻塞。而同步I/O中的同步有之前 指除了以下三种生活情况外应用进程会老是存在听候情况:

上一篇:Java网络编程从入门到精通(500):定制accept法子

    在网络应用中,一般可不前要采用同步I/O(阻塞I/O)和非阻塞I/O三种生活法子进行数据通讯。三种种生活法子从不互相排斥和互相取代。亲戚亲戚大伙可不前要在平时的应用中单独采用其中三种生活通讯法子,也可不前要混合使用三种种生活通讯法子。在本文中就那些是非阻塞I/O以及为那些要使用三种通讯法子进行了介绍,在下一篇文章中给出了有4个 简单的例子来演示在网络应用中如可使用非阻塞I/O进行通讯。

JavaJDK1.4及以前版本中提供了一套API来专门操作非阻塞I/O,亲戚亲戚大伙可不前要在java.nio包及其子包中找到相关的类和接口。可能性这套APIJDK新提供的I/O API,有之前 ,也叫New I/O,这有之前 包名nio的由来。这套API由有4个 主要的每种组成:缓冲区(Buffers)、通道(Channels)和非阻塞I/O的核心类组成。这三每种的完整性内容将在本章的里边介绍。

国内最棒的Google Android技术社区(eoeandroid),欢迎访问!《银河系列原创教程》发布《Java Web开发速学宝典》出版,欢迎定购