WEB开发网
开发学院软件开发Java Java网络编程从入门到精通(31):非阻塞I/O简介 阅读

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

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示:在网络应用中,一般可以采用同步I/O(阻塞I/O)和非阻塞I/O两种方式进行数据通讯,Java网络编程从入门到精通(31):非阻塞I/O简介,这两种方式并非互相排斥和互相取代,我们可以在平时的应用中单独采用其中一种通讯方式,客户端和服务端的写数据操作也可能发生阻塞现象),也就是说,也可以混合使用这两种通讯方式,在本文中

在网络应用中,一般可以采用同步I/O(阻塞I/O)和非阻塞I/O两种方式进行数据通讯。这两种方式并非互相排斥和互相取代。我们可以在平时的应用中单独采用其中一种通讯方式,也可以混合使用这两种通讯方式。在本文中就什么是非阻塞I/O以及为什么要使用这种通讯方式进行了介绍,在下一篇文章中给出了一个简单的例子来演示在网络应用中如何使用非阻塞I/O进行通讯。

一、什么是非阻塞I/O

我们可以将同步I/O称为阻塞I/O,非阻塞I/O称为异步I/O。在本书中采用了比较常用的叫法:同步I/O和非阻塞I/O。虽然它们的叫法不同,但含义是一样的。读者在阅读其他书时应注意这一点。

在讲解什么是非阻塞I/O之前,首先应了解什么是同步I/O,这里的同步指的是什么。同步这个概念在程序设计中主要是指代码按顺序执行的过程。如在Java程序中的main方法,如果不使用多线程,这个方法中的代码一定是从前往后按顺序执行的。这就叫做同步。如果使用了多线程,从宏观角度来看会有不同的代码段同时执行,这就叫做异步。在同步I/O中的同步概念也类似,也就是说,在I/O通讯过程中,只要是某一步的通讯未结束,就无法进行其他的通讯。那么这里的同步指的是什么呢?要回答这个问题之前,首先让我们先回忆一下,在网络通讯中有哪些地方可能会被阻塞。如果读者看了前面的章节就会知道答案。对于客户端来说,有两个地方可能会被阻塞:连接服务器(调用connect方法时)和读写数据。而在服务端也有两个地方可能会被阻塞:等待客户端请求(调用accept方法时)和读写数据(在一般情况下,写数据不会被阻塞,但如果网络环境比较差的时候,客户端和服务端的写数据操作也可能发生阻塞现象)。也就是说,可以设置超时时间的地方就可能被阻塞。而同步I/O中的同步就是指除了以下两种情况外程序会一直处于等待状态:

1 2  下一页

Tags:Java 网络编程 入门

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接