Java网络编程 I/O模型

网络编程概述

网络编程从大的方面说就是对信息的发送到接收,中间传输为物理线路的作用。
网络编程最主要的工作就是在发送端把信息通过规定好的协议进行组装包,在接收端按照规定好的协议把包进行解析,从而提取出对应的信息,达到通信的目的。中间最主要的就是数据包的组装,数据包的过滤,数据包的捕获,数据包的分析,当然最后再做一些处理,代码、开发工具、数据库、服务器架设和网页设计这5部分你都要接触。

同步与异步

同步/异步:形容一次方法的调用,在单线程中。描述的是执行者是否具备主动通知功能。

同步,调用者会等到方法调用返回后才能继续后面的行为。

异步,调用者不需要等到方法返回,方法执行完毕后会主动通知调用者。

阻塞/非阻塞:调用者是否可以执行多个任务,在多个线程中。描述的是调用者的多个线程是否可以同时执行。

阻塞:线程1和线程2不能同时进行。

非阻塞:线程1和线程2可以同时进行。

BIO、NIO和AIO

BIO表示同步阻塞式IO,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。

NIO表示同步非阻塞IO,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。

AIO表示异步非阻塞IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由操作系统先完成IO操作后再通知服务器应用来启动线程进行处理。

阻塞I/O模型

在读写数据时客户端会发生阻塞。
阻塞I/O模型的工作流程:

  1. 在用户线程发出I/O请求之后,内核会检查数据是否就绪(selector.select()),此时用户线程一直阻塞等待内存数据就绪。
  2. 在内存数据就绪后,内核将数据复制到用户线程中,并返回I/O执行的结果到用户线程,此时用户线程将解除阻塞状态并开始出来数据。
    转载

非阻塞I/O模型

在读写数据时客户端会不发生阻塞。
非阻塞I/O模型的工作流程:

  1. 在用户线程发出I/O请求之后,无须阻塞便可以马上得到内核返回的一个结果。
  2. 如果内核返回false,则表示内核数据没有准备好,需要稍后再发起I/O操作。
  3. 一旦内核中的数据准备好了,并且再次受到用户线程的请求,内核就好立刻将数据复制到用户线程并将复制的结果通知用户线程。

在非阻塞I/O模型中,用户线程需要不断轮询内核数据是否就绪,在内存数据为就绪时,用户线程可以处理其他任务,在内核数据就绪后立即获得数据并进行相应的操作。
转载

多路复用I/O模型

  1. 多路复用I/O模型是多线程并发编程使用较多的模型。(NIO)
  2. 在多路复用I/O模型中会有一个被称为Selector的线程不断轮询多个Socket的状态,只有在Socket有读写事件时,才会通知用户线程进行读写操作。
  3. 因为在多路复用模型中只需要一个线程就可以管理多个Socket(阻塞模型和非阻塞模型需要为每个Socket都建立一个单独的线程处理该Socket上的数据),并且在真正有Socket读写事件时才会使用操作系统的I/O模型,大大节约了系统资源。
    转载

信号驱动I/O模型

  1. 在信号驱动I/O模型中,在用户线程发起一个I/O请求操作时,系统会为该请求对应的Socket注册一个信号函数,然后用户线程可以继续执行其他业务逻辑。
  2. 在内核数据就绪时,系统会发送一个信号到用户线程,用户线程则在信号函数中调用对应的I/O读写操作完成实际的I/O请求操作。
    在这里插入图片描述

异步I/O模型

  1. 在异步模型中,用户线程发起一个asynchronous
    read操作到内核,内核收到请求后立刻返回一个状态,来说明请求是否成功发起,在此过程中用户线程不会发生任何阻塞。
  2. 接着,内核会等待数据准备完成并将数据复制到用户线程中,在数据复制完成后内核会发送一个信号到用户线程,通知用户线程read操作完成。
    在这里插入图片描述
    信号驱动模型中,用户线程受到信号后,需要用户线程调用I/O模型进行实际的I/O读写操作,将数据读取到用户线程。而在异步模型中,用户线程受到信号后(数据已近被复制到用户线程),用户就可以开始使用数据了。
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值