Java网络编程之IO模型阻塞与非阻塞简要分析

 更新时间:2021年09月15日 10:31:03   作者:DrLai  
这篇文章主要介绍Java网络编程中的IO模型阻塞与非阻塞简要分析,文中附有示例代码,有需要的朋友可以借鉴参考下,希望能够有所帮助

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 {
                //内核数据未处理完成,进行其他线程业务
            }
        }
    }
}

以上就是Java网络编程之IO模型阻塞与非阻塞简要分析的详细内容,更多关于java模型IO阻塞与非阻塞的资料请关注脚本之家其它相关文章!

相关文章

  • JSch教程使用sftp协议实现服务器文件载操作

    JSch教程使用sftp协议实现服务器文件载操作

    这篇文章主要为大家介绍了JSch如何使用sftp协议实现服务器文件上传下载操作,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步
    2022-03-03
  • 详解MybatisPlus集成nacos导致druid连接不上数据库

    详解MybatisPlus集成nacos导致druid连接不上数据库

    这篇文章主要介绍了详解MybatisPlus集成nacos导致druid连接不上数据库,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • 使用IntelliJ IDEA查看类的继承关系图形(图文详解)

    使用IntelliJ IDEA查看类的继承关系图形(图文详解)

    这篇文章主要介绍了使用IntelliJ IDEA查看类的继承关系图形,本文通过图文并茂的形式给大家介绍的非常详细,对大家的工作或学习具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-03-03
  • RabbitMQ交换机与Springboot整合的简单实现

    RabbitMQ交换机与Springboot整合的简单实现

    这篇文章主要介绍了RabbitMQ交换机与Springboot整合的简单实现,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • Java实现注册登录与邮箱发送账号验证激活功能

    Java实现注册登录与邮箱发送账号验证激活功能

    这篇文章主要介绍了Java实现注册登录与邮箱发送账号验证激活功能,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2022-12-12
  • Java执行可执行文件的三种方法详解

    Java执行可执行文件的三种方法详解

    这篇文章主要为大家详细介绍了Java中执行可执行文件的三种方法,文中的示例代码讲解详细,具有一定的借鉴价值,需要的小伙伴可以参考一下
    2024-02-02
  • Spring boot文件路径映射配置代码实例

    Spring boot文件路径映射配置代码实例

    这篇文章主要介绍了Spring boot文件路径映射配置代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06
  • Java如何获取JSON中某个对象的值

    Java如何获取JSON中某个对象的值

    这篇文章主要介绍了Java如何获取JSON中某个对象的值,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-06-06
  • Tomcat中session的管理机制

    Tomcat中session的管理机制

    这篇文章主要为大家详细介绍了Tomcat中session的管理机制 ,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09
  • 集合框架及背后的数据结构

    集合框架及背后的数据结构

    本文主要介绍了Java的集合框架Java Collection Framework,接口interface以及背后的数据结构,感兴趣的同学可以阅读参考
    2023-03-03

最新评论