java 网络编程(一)-- IO模型

#博学谷IT学习技术支持#


java网络编程大家都已经接触过,但是对于网络编程底层的io模型,以及如何去使用bio、nio,这里来介绍下

IO模型

同步阻塞io

在这里插入图片描述
同步阻塞io应该是接触并且使用最多的io模型。网络编程中的ServerSocker和Socket所使用的就是同步阻塞的io模型。
同步阻塞指在进行再进行read操作时,会将当前线程阻塞。当线程处于阻塞状态时,是不能进行其他处理操作的。因此同步阻塞的io模型占用的资源是比较大的。

同步非阻塞

在这里插入图片描述

同步非阻塞其实就是在同步阻塞的基础上。如果read操作没有数据时,内核会返回一个信息,表示没有数据。在应用程序收到内核返回时,如果有数据将会进行数据处理操作,如果没有数据,则进行轮训,进行下一次的read操作。
这里要注意的是,如果每个应用都使用非阻塞模型,那个都要进行轮询操作。比如,在网络编程时,连接了100个客户端,使用非阻塞io模型处理时,这100个客户端的连接都要进行不断的轮询操作。但肯定不是每次轮询都有客户端数据发送过来,因此,可能会有很多的轮询操作都是空轮询。也是很耗费资源的。因此就有了多路复用的io模型

io多路复用

在这里插入图片描述
io多路复用,其实就是一次轮询操作,可以同时查询多个。比如,还是之前的100个客户端,这里我们可以将100放在一起,使用select调用内核进行查询,然后内核会查询这100个是否有需要处理的数据,并将有需要处理的返回。io的多路复用使用的比较多,比如java中的nio底层就是使用的io多路复用模型;

异步io模型

在这里插入图片描述
异步io模型,主要就是增加了一个回调,应用程序向内核发起read请求,内核接受后返回数据。在后续当有数据需要进行处理时,内核会执行相应回调。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值