UNIX的五种IO模型

Java IO和UNIX IO之间的关系

Java IOUNIX IO
BIOBlocking IO
NIOIO multiplexing
AIOAsynchronous IO
五种I/O模型
阻塞I/O(blocking IO)

在这里插入图片描述
用户调用io后一直阻塞到数据准备好复制到用户空间之后再返回。

非阻塞IO (non-blocking IO)

在这里插入图片描述
这个模型下在调用io系统调用之后不会阻塞用户线程,通过用户线程不断询问内核数据是否准备好,当内核返回数据准备完毕,用户线程再将数据从内核空间复制到用户空间。

IO多路复用 (IO muticomplex)

在这里插入图片描述
这种模型下存在着一个多路复用器(select/poll/epoll)可以监听多个多个socket的io事件,如何任何一个或者多个sokect准备好,用户线程返回处理这些事件。这个模型任然会阻塞用户线程,但是可以使用一个用户线程处理多个IO请求,复用了线程。

异步IO(asynchronous IO)

在这里插入图片描述
程序发起一个IO系统调用之后立马返回,内核在数据准备好之后复制到用户空间再发送信号给用户线程,用户线程收到信号之后进行读写。

对比

io comparision

问题
1. 旧版本的java nio使用了select系统调用,现在使用的是epoll?

因为select会不断的轮询文件描述符,epoll是注册一个回调函数,epoll效率会好。

2. java有真正的AIO吗?

Windows中的实现是的IOCP。在Linux中,没有,linux中的AIO的底层还是epoll。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值