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

目录
  • 1.阻塞I/O模型
  • 2.非阻塞I/O模型

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阻塞与非阻塞的资料请关注我们其它相关文章!

(0)

相关推荐

  • Java网络编程之UDP实现原理解析

    UDP实现通信非常简单,没有服务器,每个都是客户端,每个客户端都需要一个发送端口和一个接收端口.一个客户端向另一个客户端发送消息时,需要知道对方的IP和接收端口,所用到的类为DatagramSocket. DatagramSocket socket =new DatagramSocket(),发送端socket,若不指定端口,系统自动分配 DatagramSocket socket =new DatagramSocket("接收信息端口"),接收端socket,需要指定接收端口 ​ 若

  • Java 全面掌握网络编程篇

    目录 计算机网络 网络模型 客户机服务器模式(Client/Server) TCP/IP的概念和实现 TCP三次握手(Three-way handshake) TCP编程 UDP的概念和实现 UDP编程 TCP和UDP的区别 聊天室 服务器处理线程 客户端处理线程 服务器 客户端 效果 计算机网络 是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统,网络管理软件及网络通信协议的管理和协调下,实现资源共享和信息传递的计算机系统.包括局域网(intrane

  • Java小白第一次就能看懂的网络编程

    目录 一.网络基础 二.网络协议 URL类 一.网络基础 二.网络协议 实现TCP的网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 public class TCPTest1 { //客户端 @Test public void client() { Socket socket = null; OutputStream os = null; try { //1.创建Socket对象,指明服务器端的ip和端口号 InetAddress inet = InetAddress.ge

  • Java网络编程UDP协议发送接收数据

    本文实例为大家分享了Java网络编程UDP协议发送接收数据的具体代码,供大家参考,具体内容如下 UDP协议发送数据步骤 A:创建发送端socket对象: B:创建数据,并把数据打包: C:调用socket对象的发送方法发送数据包: D:释放资源 package net; import java.io.IOException; import java.net.DatagramPacket; import java.net.DatagramSocket; import java.net.InetAd

  • Java网络编程之入门篇

    目录 一.网络基础 二.网络协议 URL类 一.网络基础 二.网络协议 实现TCP的网络编程 例子1:客户端发送信息给服务端,服务端将数据显示在控制台上 public class TCPTest1 { //客户端 @Test public void client() { Socket socket = null; OutputStream os = null; try { //1.创建Socket对象,指明服务器端的ip和端口号 InetAddress inet = InetAddress.ge

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

    目录 1.阻塞I/O模型 2.非阻塞I/O模型 1.阻塞I/O模型 阻塞IO模型是常见的IO模型,在读写数据时客户端会发生阻塞.阻塞IO模型的工作流程为: 1.1在用户线程发出IO请求之后,内核会检查数据是否就绪,此时用户线程一直阻塞等待内存数据就绪: 1.2在内存数据就绪后,内核将数据复制到用户线程中,并返回I/O执行结果到用户线程,此时用户线程将解除阻塞状态并开始处理数据. 典型的阻塞I/O模型的例子为data= socket.read(),如果内核数据没有就绪, Socket线程就会一直阻

  • java 网络编程之TCP通信和简单的文件上传功能实例

    TCP通信需要明确的几点: tcp通信是面向连接的,需要先启动服务端,再启动客户端. 客户端和服务端都要创建套接字对象,客户端需要指定服务端套接字(ip+port),而服务端必须指定服务端口. Socket client_socket = new Socket("192.168.100.17",8888); //客户端套接字(Socket类的套接字为已连接套接字) ServerSocket listen_socket = new ServerSocket(8888); //服务端套接字

  • Python并发编程之IO模型

    五种IO模型 为了更好地了解IO模型,我们需要事先回顾下:同步.异步.阻塞.非阻塞 同步(synchronous) IO 异步(asynchronous) IO 阻塞(blocking) IO 非阻塞(non-blocking)IO 五种I/O模型包括:阻塞I/O.非阻塞I/O.信号驱动I/O(不常用).I/O多路转接.异步I/O.其中,前四个被称为同步I/O. 上五个模型的阻塞程度由低到高为:阻塞I/O > 非阻塞I/O > 多路转接I/O > 信号驱动I/O > 异步I/O,因

  • Java 网络编程之 TCP 实现简单的聊天系统

    客户端 1.连接服务器 Socket 2.发送消息 package lesson02; import java.io.IOException; import java.io.OutputStream; import java.net.InetAddress; import java.net.Socket; /** * 客户端 */ public class TcpClientDemo1 { public static void main(String[] args) { Socket socke

  • Java网络编程之URL+URLconnection使用方法示例

    目录 HTTP GET和POST 从URLs到本地文件 在java.net包中包含两个有趣的类:URL类和URLConnection类.这两个类可以用来创建客户端到web服务器(HTTP服务器)的连接.下面是一个简单的代码例子: URL url = new URL("http://jenkov.com"); URLConnection urlConnection = url.openConnection(); InputStream input = urlConnection.getI

  • Java网络编程之TCP通信完整代码示例

    一.概述 Socket类是Java执行客户端TCP操作的基础类,这个类本身使用代码通过主机操作系统的本地TCP栈进行通信.Socket类的方法会建立和销毁连接,设置各种Socket选项. ServerSocket类是Java执行服务器端操作的基础类,该类运行于服务器,监听入站TCP连接,每个socket服务器监听服务器的某个端口,当远程主机的客户端尝试连接此端口时,服务器就被唤醒,并返回一个表示两台主机之间socket的正常Socket对象. 二.什么是TCP? TCP是一种面向连接的.可靠的.

  • Java网络编程之TCP程序设计

    本文实例为大家分享了Java网络编程TCP程序设计的具体代码,供大家参考,具体内容如下 [1] TCP编程的主要步骤 客户端(client): 1.创建Socket对象,构造方法的形参列表中需要InetAddress类对象和int型值,用来指明对方的IP地址和端口号. 2.通过Socket对象的getOutputStream()方法返回OutputStream抽象类子类的一个对象,用来发送输出流. 3.通过输出流的write方法输出具体的信息. 4.关闭相应的流和Socket对象. 服务端(se

  • java网络编程之socket网络编程示例(服务器端/客户端)

    Java为TCP协议提供了两个类,分别在客户端编程和服务器端编程中使用它们.在应用程序开始通信之前,需要先创建一个连接,由客户端程序发起:而服务器端的程序需要一直监听着主机的特定端口号,等待客户端的连接.在客户端中我们只需要使用Socket实例,而服务端要同时处理ServerSocket实例和Socket实例;二者并且都使用OutputStream和InpuStream来发送和接收数据. 学习一种知识最好的方式就是使用它,通过前面的笔记,我们已经知道如何获取主机的地址信息,现在我们通过一个简单的

  • Java TCP编程之Scoket

    目录 一.什么是Scoket 二.服务器端 三.客户端 四.Socket流 五.总结 一.什么是Scoket Socket 是一个抽象概念,一个应用程序通过一个 Socket 来建立一个远程连接,而 Socket 内部通 过 TCP/IP 协议把数据传输到网络. ┌───────────┐                                   ┌───────────┐│Application│                                   │Applicat

随机推荐