四种主要的IO

名词解释

阻塞IO:需要内核IO操作彻底完成后才返回到用户空间执行用户程序的操作指令。阻塞指的是用户程序(发起IO请求的进程或者线程)的执行状态。传统的IO模型都是阻塞IO模型(java默认创建的socket)。

非阻塞IO:用户空间的程序不需要等待内核IO操作彻底完成,可以立即返回用户空间去执行后续的指令,即发起IO请求的用户程序或者线程处于非阻塞状态,与此同时,内核会立即返回给用户一个IO状态值。

同步与异步:可以将同步与异步看作发起IO 请求的两种方式。

同步IO:用户空间(进程或线程)是主动发起IO请求的一方,系统内核是被动接受方。

异步IO:系统内核是主动发起IO请求的一方,用户空间是被动接受方。

1、同步阻塞IO

指的用户空间(进程或者线程)主动发起,需要等待内核操作彻底完成后才返回到用户空间的IO操作。在IO过程请求的用户进程或者线程处于阻塞状态。

2、同步非阻塞IO(NIO):此NIO不是java编程中的NIO,Java中的NIO(new IO)类库组件所归属的不是基础IO模型中的NIO模型,而是IO多路复用模型。

指的是用户进程主动发起,不需要等待内核IO操作彻底完成就能立即返回用户空间的IO操作。在IO操作过程中,发起IO请求的用户进程或者线程处于非阻塞状态。

3、IO多路复用

通过select/epoll系统调用,单个应用程序的线程可以不断的轮询成百上千的socket连接的就绪状态,当某个或者某些socket网络连接有IO就绪状态时就返回这些就绪的状态(或者说就绪事件)。

特点:IO多路复用的IO涉及两种系统调用,一种是IO操作的系统调用,另一种是select/epoll就绪查询系统调用。IO多路复用模型建立在操作系统的基础设施之上,及操作系统的内核必须能够提供多路分离的系统调用select/epoll。

4、异步IO

用户线程通过系统调用向内核注册某个IO操作。内核在整个IO操作(包括数据准备、数据复制)完成后通知用户程序,用户执行后续的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值