Java网络编程之IO模型阻塞与非阻塞简要分析
作者:DrLai 时间:2021-08-10 18:10:25
1.阻塞I/O模型
阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞。阻塞IO模型的工作流程为:
1.1在用户线程发出IO请求之后,内核会检查数据是否就绪,此时用户线程一直阻塞等待内存数据就绪;
1.2在内存数据就绪后,内核将数据复制到用户线程中,并返回I/O执行结果到用户线程,此时用户线程将解除阻塞状态并开始处理数据。
典型的阻塞I/O模型的例子为data= socket.read(),如果内核数据没有就绪, Socket线程就会一直阻塞在 reado中等待内核数据就绪。
2.非阻塞I/O模型
非阻塞I/O模型指用户线程在发起一个操作后,无须阻塞便可以马上得到内核返回的一个结果。如果内核返回的结果为fase,则表示内核数据还没准备好,需要稍后再发起I/O操作。一旦内核中的数据准备好了,并且再次收到用户线程的请求,内核就会立刻将数据复制到用户线程中并将复制的结果通知用户线程。
在非阻塞IO模型中,用户线程需要不断询问内核数据是否就绪,在内存数据还未就绪时,用户线程可以处理其他任务,在内核数据就绪后可立即获取数据并执行相应的操作。典型的非阻塞IO模型一般如下:
import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
public class Test7 {
public static void main(String[] args) throws IOException {
ServerSocket socket=new ServerSocket();
while(true){
Socket data=socket.accept();
if (data!=null) {
//数据处理完毕
break;}
else {
//内核数据未处理完成,进行其他线程业务
}
}
}
}
来源:https://blog.csdn.net/DrLai/article/details/119830453
标签:IO,阻塞,非阻塞
![](/images/zang.png)
![](/images/jiucuo.png)
猜你喜欢
MyBatis-Plus联表查询(Mybatis-Plus-Join)的功能实现
2023-11-25 03:24:33
![](https://img.aspxhome.com/file/2023/3/60023_0s.png)
Spring Boot整合流控组件Sentinel的场景分析
2023-06-22 19:27:53
![](https://img.aspxhome.com/file/2023/0/57600_0s.jpg)
Java实现简单文件过滤器功能
2021-09-13 23:27:58
![](https://img.aspxhome.com/file/2023/1/62111_0s.png)
Java实现级联下拉结构的示例代码
2023-11-03 18:22:06
本地jvm执行flink程序带web ui的操作
2022-09-03 20:49:00
将文件夹下所有文件输出到日志文件中 c#递归算法学习示例
2023-04-08 20:36:22
Java自定义实现链队列详解
2023-06-22 12:47:31
![](https://img.aspxhome.com/file/2023/6/57426_0s.png)
使用chatgpt实现微信聊天小程序的代码示例
2022-04-26 17:18:24
![](https://img.aspxhome.com/file/2023/0/67500_0s.jpg)
如何安装java的运行环境IDEA
2022-09-20 10:42:38
![](https://img.aspxhome.com/file/2023/0/64380_0s.png)
java读取XML文件的四种方法总结(必看篇)
2023-03-22 23:12:58
关于java 图形验证码的解决方法
2023-08-09 15:21:19
springcloud初体验(真香)
2022-12-08 06:33:44
![](https://img.aspxhome.com/file/2023/8/68728_0s.jpg)
MyBatis插入Insert、InsertSelective的区别及使用心得
2023-08-25 04:34:28
Java中的main函数的详细介绍
2021-10-03 16:09:16
使用logback屏蔽一些包的日志
2023-08-08 20:46:20
java如何导出insert语句并生成sql脚本
2022-05-18 10:33:54
浅析JDK12的五大重要新特性(推荐)
2023-01-28 19:09:24
详解springboot和vue前后端分离开发跨域登陆问题
2023-08-07 00:48:38
java通过方向键控制小球移动的小游戏
2023-11-10 05:25:59
JAVA使用POI(XSSFWORKBOOK)读取EXCEL文件过程解析
2023-03-01 16:36:39
![](https://img.aspxhome.com/file/2023/1/62811_0s.png)