简论BIO NIO AIO
来源:互联网 发布:网络教育要多少钱 编辑:程序博客网 时间:2024/05/16 14:13
IO的方式通常分为3种:同步阻塞的BIO、同步非阻塞的NIO、异步非阻塞的AIO
一. 我们先来认识几个名词:
(1) 同步:指的是用户进程触发IO操作并等待或者轮询的去查看IO操作是否就绪。(只干这一件事)
(2)异步:异步是指用户进程触发IO操作以后便可以开始做自己的事情,而当IO操作已经完成的时候会得到IO完成的通知(这就是异步的特点,就是通知,比如你告诉你的好朋友去买一些零食,并且告诉他你喜欢吃甜的,酸的,托他去买,然后自己去干其他事情)。使用异步IO时,java会将IO读写委托给OS处理,需要将数据缓冲区地址和大小传给OS。
(3)阻塞:阻塞是指当试图对该文件描述符进行描述读写时,如果当时没有东西可读,或者暂时不可写,程序就进行等待状态,直到有东西可读或可写为止(比如你去商店买东西,售票员突然有事离开,这时我们就需要在这里等待,直到售票员回来)。
(4)非阻塞:非阻塞状态下,如果没有东西可读,或者不可写,读写函数马上返回,而不会等待。(比如去银行取钱,你可以先领取一张小票,领取完后我们可以自己玩手机,聊天,当轮到我们时,银行会通知你,这个时候我们就可以去了)。
二.我们再理解一下组合方式的IO类型:
(1)同步阻塞IO(java BIO):同步阻塞,服务器实现模式为一个接一个线程,即客户端有连接请求时服务器就需要启动一个线程进行处理,如果这个连接不做任何事情会造成不必要的线程开销,当然可以通过线程池机制改善。(只干这一件事,遇到阻塞一直等待)
(2)同步非阻塞IO(java NIO):服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有I/O请求时才启动一个线程进行处理。用户进程也需要时不时的询问IO操作是否就绪,这就要求进程不停的去询问。(自己干,但是可以在等待时干其他事情)
(3)异步阻塞IO(java NIO):此种方式下是指应用发起一个IO操作以后,不等待内核IO操作的完成,等内核完成IO操作以后会通知应用程序,这其实就是同步和异步最关键的区别,同步必须等待或者主动的去询问IO是否完成,那么为什么说是阻塞的呢?因此此时是通过select系统调用来完成的,而select函数本身的实现方法是阻塞的,而采用select函数有个好处就是它可以同时监听多个文件句柄(如果从UNP的角度看,select属于同步操作,因为select之后进程还需要读写数据),从而提高系统的并发性。(让别人干,同时等待的同时不能干其他事情)
(4)异步非阻塞IO(java AIO):在此种模式下,用户进程只需要发起一个IO操作然后立刻返回,等IO操作真正的完成以后,应用程序会得到IO操作完成的通知,此时用户进程只需要对数据进行处理就好了,不需要进行实际的IO读写操作,因为真正的IO读写或者写入操作已经由内核完成了。(让别人干,等待的同时,可以干其他事情)。
阅读全文
1 0
- 简论BIO NIO AIO
- BIO/AIO/NIO
- BIO AIO NIO
- BIO,NIO,AIO
- BIO、NIO、AIO区别
- java BIO NIO AIO
- BIO NIO AIO
- Java BIO、NIO、AIO
- java BIO NIO AIO
- Java BIO/NIO/AIO
- java bio nio aio
- BIO、NIO、AIO
- java nio aio bio
- java nio bio aio
- JAVA AIO BIO NIO
- Java BIO、NIO、AIO
- Java bio nio aio
- Java BIO、NIO、AIO
- Html中代码换行造成空格间距如何解决
- 案例-雨滴-canvas绘制
- (003) java后台开发之设置Eclipse的代码提示
- 属性选择器和前缀
- was命令行确定服务状态
- 简论BIO NIO AIO
- HOW DOES A DATABASE WORK
- 300. Longest Increasing Subsequence (Medium)
- 明明的leetcode日常:1. Two Sum
- C++随记(七)--引用变量
- 【ROS总结】教程Actionlib——使用Execute Callback编写一个简单的行为服务器
- 淘淘商城系列——ActiveMQ发送topic消息和接收topic消息
- MFC Tab背景颜色及窗体内控件背景颜色更改
- WPF自定义表格控件(动态添加/删除行)