`
mouer
  • 浏览: 101092 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

nio和io的服务器端比较

    博客分类:
  • J2SE
阅读更多



 1.) io:

传统的io,JDK1.4以前:
即当程序执行输入/输出操作后,在这些操作返回之前会一直阻塞该线程,
所以服务器必须为每个客户端都提供一条独立线程进行处理(否则无法继续运行),
当服务器需要同时处理大量客户端时,这种做法会导致性能下降.(比如在单核状态下,CPU同一时刻处理一个线程).

做为服务器端,其处理结构如下图所示:



 

假设如 [jdk1.4]socket举例--基于nio 中的Server程序,有4个client同时到达,Server端accept其中1个连接,建立一个线程(A为Server主线程,B为新建的线程).

A线程继续accept,并同上处理其他3个线程..这时,就新建了4个线程

B线程读取client输入(阻塞),假设这里等待了10秒,才接收到流,并处理.那么,这个线程B至少存在10秒..

我们假设程序的处理时间,接收流的时间以及创建线程的时间可以忽略不计,那么,A线程处理完全部4个请求的时间为10秒..


2.) nio

说到nio,就不得不提其的设计模式,反应器模式,其核心思想:

1).将事件多路分用
2).将事件分派到各自相应的事件处理程序

Selector 类是 Channel 的多路复用器。 Selector 类将传入客户机请求多路分用并将它们分派到各自的请求处理程序。

做为服务器端,其处理结构如下图所示:

 

假设如上文传统socket举例--基于io 中的Server程序,有4个client同时到达,Server端select其中1个连接,这里它并没有创建新的线程,而是

判断,当client有读/写操作时,在对应建立写/读操作..

好比4个人去食堂吃饭,饭菜好比流:

io做法是:4个人不停地问,我的菜好了没有(CPU的时间片)..

nio的做法是:委托另外一个人看着,当自己的好了通知自己就行(不通知自己的时候自己不做动作)..


长连接时和普通io差不多..

这样看来,nio在socket并发量大,且短连接的时候,有优势..

网上还有种说法,说nio在windows下的实现是iocp ,在linux下的实现是epoll..如果是这样,那么从底层实现来讲,nio的效率要好的多,不过我没有查阅native的c的源码..不知道这种说法是否属实,有兴趣的童鞋可以查阅下,然后给我留个言,这里先谢过了..

  • 大小: 72.1 KB
  • 大小: 81.5 KB
分享到:
评论

相关推荐

    Java_NIO与IO的区别和比较.doc

    例如,在服务器端,`ServerSocket`的`accept()`方法会阻塞,直到有客户端连接。而NIO的非阻塞模式下,`Selector`可以监控多个通道,当数据准备好时才进行实际的读写操作,避免了线程长时间阻塞。 以网络服务器为例...

    基于事件的 NIO 多线程服务器

    基于事件的 NIO 多线程服务器

    Nio和Io的详细描述.docx

    - **ServerSocketChannel**:用于监听客户端连接的服务器端通道。 - **非阻塞服务器设计**:使用选择器实现的服务器,能够处理多个并发连接。 - **DatagramChannel**:支持UDP协议的通道。 - **Pipe**:用于在应用...

    Java IO_NIO

    总结来说,Java NIO提供了一种更高效、更适合处理并发的IO模型,尤其在服务器端开发中,如高并发的网络应用,NIO的优势更为明显。理解和掌握Java IO与NIO的使用,对于提升Java应用程序的性能和可扩展性至关重要。

    NIO和传统IO比较.rar

    - **NIO**:适合大规模的、随机的、高并发的网络I/O操作,如服务器端的大量并发连接处理。 7. **性能对比** - **传统IO**:在小规模和简单的I/O操作中,由于其简洁性,性能可能优于NIO。 - **NIO**:在处理高...

    JavaNIO与IO的区别和比较.pdf

    总结来说,Java NIO相比于传统的IO,提供了更为灵活和高效的I/O操作方式,特别适合于处理高并发、低延迟的网络应用,如服务器端的开发。学习和掌握NIO对于Java开发者来说,能提升在系统级编程和网络编程领域的专业...

    Java-NIO非阻塞服务器示例.docx

    ServerSocketChannel和SocketChannel是NIO包中的两个重要的Channel接口,分别用于服务器端和客户端的连接。ServerSocketChannel用于监听客户端的连接请求,而SocketChannel用于与客户端进行通信。 五、ByteBuffer...

    JavaNIO浅析IO模型Java开发Java经验技巧共1

    1. **服务器端的高并发场景**:例如聊天室、游戏服务器等,NIO能有效利用资源,处理大量并发连接。 2. **大文件传输**:NIO的缓冲区机制使得大文件传输更加高效。 3. **网络通信**:NIO的非阻塞特性适合处理网络请求...

    nio.zip_NIO_NewIO_NIO.c_java NIO chm_java nio

    总的来说,Java NIO提供了更强大的I/O能力,特别适合于服务器端编程和大规模数据处理。通过学习和掌握NIO,开发者可以构建出更为高效、可扩展的网络应用和服务。`nio.zip`这个压缩包包含了有关NIO的CHM文档,对于...

    NioSocket,包括server端和client端

    NioSocket是一个基于Java NIO(非阻塞I/O)技术实现的网络通信框架,它包含服务器端(Server)和客户端(Client)两部分。在Java编程中,NIO(New Input/Output)提供了一种不同于传统IO模型的I/O操作方式,其核心...

    java io 与java nio区别

    这个例子展示了如何使用传统的Java IO来实现一个服务器端的应用程序,它可以接收客户端发送的消息,并将接收到的信息原样返回给客户端。这里使用了`ServerSocket`和`Socket`来进行网络通信,通过`BufferedReader`来...

    IO和NIO输入输出流

    NIO适用于高并发、低延迟的网络应用,如服务器端的多路复用。 2. 通道和缓冲区:通道类似于流,但可以同时进行读写操作,如FileChannel、SocketChannel等。缓冲区是数据存储区域,提供读写数据的高效方式。例如,...

    高性能网络编程必备技能之IO与NIO阻塞分析

    而在高并发、大数据量或者需要保持长连接的服务中,NIO的优势更为明显,如服务器端的聊天应用、高并发的Web服务等。 不过,NIO也并非没有缺点,它的API相对复杂,使用起来有一定的学习曲线。Java NIO.2(New IO 2,...

    NIO与传统IO的区别共9页.pdf.zip

    综上所述,NIO主要针对Java的IO性能和并发能力进行了优化,尤其适合处理大量并发连接的服务器端应用,如网络聊天服务、游戏服务器等。而传统IO更适合于低并发、数据量较小的应用场景。理解并熟练运用这两种IO模型,...

    NIO 服务器客户端例子

    在这个"NIO 服务器客户端例子"中,`TestServer.java`和`TestClient.java`分别代表服务器端和客户端的实现。 **NIO服务器端(TestServer.java)的关键知识点:** 1. **选择器(Selector)**:服务器通常会创建一个...

    IO及NIO技术专题培训材料

    - 基于NIO的服务器端编程,通常会创建ServerSocketChannel监听客户端连接,然后使用Selector监控多个客户端连接,从而实现高效的并发处理。 在学习IO和NIO时,JDK API文档是非常重要的参考资料。例如,`JDK_API_1_...

    自己写的Java NIO 同步不阻塞IO操作

    - `java.nio.channels.ServerSocketChannel`:用于服务器端,可以监听新的连接请求。 - `java.nio.channels.Selector`:通过`open()`方法创建,用于注册感兴趣的通道,并监听这些通道上的事件。 - `java.nio....

    JavaNIO非阻塞服务器示例.pdf

    NIO提供了与标准IO不同的I/O工作方式,它以非阻塞的方式处理网络通信,适用于高并发、低延迟的场景,如服务器端编程。在这个Java NIO非阻塞服务器示例中,我们看到如何使用Mina2.0框架来构建一个简单的服务器。 ...

    java nio Selector的使用-服务器端

    Java NIO(New IO)是Java 1.4版本引入的一个新模块,它提供了一种新的方式来处理I/O操作,相比传统的IO模型,NIO提供了更高效、更灵活的I/O编程。Selector是Java NIO中的核心组件,用于监听多个通道的事件,如连接...

    Java中的IO与NIO-jiava求职面试-15题,答案

    此外,NIO还提供了选择器(Selector),允许单个线程管理多个通道,提高了并发处理能力,尤其适用于大量连接的服务器端应用。 在IO模型方面,面试中可能会考察阻塞IO、非阻塞IO和多路复用IO。阻塞IO是最基础的模型...

Global site tag (gtag.js) - Google Analytics