`

nio通信模型

    博客分类:
  • io
阅读更多

今天开始学习java并发编程,希望自己能有耐心.
先来看下阻塞io 和nio.

之前有了解过阻塞的io,以ServerSocket.accept()方法为例子,当socket的服务器端调用此方法时,会阻塞,一直等待客户端发起到服务器端的连接,知道有数据才进行返回,然后发起一个线程去进行处理,每个客户端过来,都会发起一个线程去处理.


client1-------       -------
client2-------server ------
.                                    n个处理程序
.
clientn-------       -------

如此,我们可以看到,对资源的耗费是肯定存在的,当客户端的程序大量出现时,服务端需要创建大量的处理程序,每个处理程序都需要耗费栈空间和cpu时间片.
同时阻塞带来的上下文切换是没有意义的.


对于nio,是非阻塞的,

client和server之间是管道channel, client有一个selector管理管道,server也有一个selector管理管道,selector可以向channel中注册事件,包括 读事件,写事件,客户端发起到服务端的连接事件,服务端接收客户端的请求事件,两端的处理程序会轮询selector,获取事件,进行相应的处理.

nio的原理:
1. 由一个专门的线程来处理所有的 IO 事件,并负责分发。
2. 事件驱动机制:事件到的时候触发,而不是同步的去监视事件。
3. 线程通讯:线程之间通过 wait,notify 等方式通讯。保证每次上下文切换都是有意义的。减少无谓的线程切换

分享到:
评论

相关推荐

    基于java的BIO、NIO、AIO通讯模型代码实现

    Java作为一门广泛使用的开发语言,提供了多种I/O(Input/Output)通信模型,包括传统的阻塞I/O(BIO)、非阻塞I/O(NIO)以及异步I/O(AIO)。这些通信模型在不同的场景下有着各自的优势,理解和掌握它们对于优化...

    传统BIO编程模型及NIO编程模型源码

    3. **复杂性**:NIO的编程模型相对复杂,需要理解和处理选择器、通道、缓冲区等概念,而BIO则相对简单。 **NIO的实际应用:** Netty是一个基于NIO的高性能、异步事件驱动的网络应用程序框架,它简化了网络编程,...

    JAVA NIO 异步通信客户端

    在描述中提到的"JAVA NIO 异步通信客户端"是指使用NIO API实现的一个客户端程序,它能够在不阻塞主线程的情况下进行网络通信。这通常通过使用Selector和Channel来完成。Selector负责监控多个通道的状态变化,而...

    Java NIO通信框架在电信领域的实践

    ### Java NIO通信框架在电信领域的实践 #### 华为电信软件技术架构演进 **1.1 电信软件概述** 电信软件是一个宽泛的概念,根据功能和应用场景的不同大致可以分为两大类:系统软件和业务应用软件。系统软件通常...

    使用NIO方式完成简单的通信

    在Java编程中,NIO(New IO)是一种与传统IO不同的I/O模型,它提供了非阻塞的输入/输出操作,适用于高并发、大数据量的网络应用。本教程将介绍如何使用NIO来实现简单的通信,包括消息头和消息体的设计。 首先,我们...

    JAVA NIO 异步通信模板服务端

    Java NIO(New Input/Output)是Java在J2SE 1.4版本中引入的一个新特性,它提供了与标准I/O完全不同的编程模型,尤其是在处理大量并发连接时,NIO展现出了更高的效率。本模板服务端就是基于JAVA NIO实现的异步通信...

    基于java NIO的socket通信demo

    Java NIO(New Input/Output)是Java标准库提供的一种I/O模型,它与传统的 Blocking I/O(BIO)模型不同,NIO提供了非阻塞的读写方式,提高了系统在处理大量并发连接时的效率。在这个“基于java NIO的socket通信demo...

    NIO实现客户端之间通信

    在Java编程领域,NIO(New Input/Output)是一种非阻塞I/O模型,它提供了比传统的IO模型更高效的数据处理方式。NIO的核心组件包括通道(Channels)、缓冲区(Buffers)和选择器(Selectors)。在本文中,我们将深入...

    socket通信NIO代理模式demo实例

    NIO(Non-blocking I/O)是Java提供的一个高效I/O模型,相较于传统的IO模型,NIO具有非阻塞、多路复用等特性,能够更好地处理大量并发连接。本实例"socket通信NIO代理模式demo"将展示如何利用NIO来构建一个高性能的...

    Socket 之 BIO、NIO、Netty 简单实现

    Socket是网络编程中的基础组件,它提供了进程间通信(IPC)和网络通信的能力。...通过阅读《Socket 之 BIO、NIO、Netty 简单实现》的博客,你可以了解如何在Java中实现这些通信模型,从而提升网络服务的性能和可靠性。

    Java NIO非阻塞服务端与客户端相互通信

    Java NIO(New IO)是Java 1.4版本引入的一种新的IO模型,它提供了不同于传统阻塞IO的处理方式,极大地提高了IO操作的效率。非阻塞IO的核心在于,当数据不可用时,不会使线程等待,而是立即返回并进行其他操作,这样...

    Nio非阻塞socket通信demo

    在这个“Nio非阻塞socket通信demo”中,我们可以深入理解NIO在Socket通信中的应用。 1. **Java NIO基础** - **通道(Channels)**:NIO的核心概念之一,通道是数据读写的目标或来源,如文件通道、套接字通道等。...

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

    3. **网络通信**:NIO的非阻塞特性适合处理网络请求,减少线程切换开销。 六、NIO的不足 虽然Java NIO带来了诸多优势,但也存在一些问题,如API复杂、学习曲线较陡峭,以及异常处理相对繁琐等。对于新手来说,可能...

    JavaSocket学习---NIO实现非阻塞的通信

    接下来是`EchoClient.java`,客户端通常采用单线程阻塞I/O模型,但在NIO模式下,也可以实现非阻塞通信。客户端创建一个`SocketChannel`连接到服务器,然后同样注册到`Selector`,设置感兴趣的读事件。客户端发送数据...

    NIO实现网络通信,直接就能跑

    在Java编程领域,NIO(New IO...这种通信模型适用于那些需要处理大量并发连接的服务器,例如Web服务器、聊天服务器等。通过阅读和理解这两个类的代码,开发者可以深入理解Java NIO的工作原理,并将其应用于实际项目中。

    android-socket-nio-master.zip

    8. **性能优化**:通过调整Selector的选择超时时间、合理分配Buffer大小、预读和延迟写等手段,可以进一步提升NIO通信的性能。 总之,"android-socket-nio-master"项目提供了一个在Android环境中实现高效Socket通信...

    BIO、NIO、AIO、Netty 、TCP全网最全解析!Netty中提供了哪些线程模型?

    在Netty中,使用NIO或AIO实现的TCP连接,可以结合其线程模型,如EventLoopGroup(事件循环组)和ChannelHandler(通道处理器)等组件,实现高效、可扩展的网络通信。例如,BossGroup处理新的连接请求,WorkerGroup...

    java NIO.zip

    Java NIO,全称为Non-Blocking Input/Output(非阻塞输入/输出),是Java标准库提供的一种替代传统的I/O模型的新技术。自Java 1.4版本引入NIO后,它为Java开发者提供了更高效的数据传输方式,尤其是在处理大量并发...

Global site tag (gtag.js) - Google Analytics