java中的io模型,java nio提供了与标准io

  java中的io模型,java nio提供了与标准io

  我们常见的IO模型有:阻塞IO模型、非阻塞IO模型、复用IO模型、信号驱动IO模型、异步IO模型;下面简单介绍一下上面的IO模型。

  如何解决写爬虫IP受阻的问题?立即使用。

  1、阻塞 IO 模型

  最传统的IO模式,即读写数据的过程中会出现阻塞现象。当用户线程发送IO请求时,内核将检查数据是否准备好。如果没有准备好,会等待数据准备好,用户线程会被阻塞,用户线程会交出CPU。当数据准备好时,内核会将数据复制到用户线程,并在用户线程释放阻塞状态之前将结果返回给用户线程。典型的阻塞IO模型的例子有:data=socket . read();如果数据没有准备好,它将总是在read方法中被阻塞。

  2、非阻塞 IO 模型

  当用户线程发起读操作时,它不需要等待,但会立即得到一个结果。如果结果是错误的,它知道数据没有准备好,所以它可以再次发送读操作。一旦内核中的数据准备就绪,并且再次收到来自用户线程的请求,它会立即将数据复制到用户线程,然后返回。所以,实际上在非阻塞IO模式下,用户线程需要不断询问内核数据是否准备好,也就是说非阻塞IO不会交出CPU,而是一直占用CPU。典型的非阻塞IO模型通常如下:

  while(true){

  data=socket . read();

  如果(数据!=错误){

  处理数据

  打破;

  }

  }但是对于非阻塞IO来说,有一个非常严重的问题。在while循环中,需要不断地询问内核数据是否准备好,这将导致非常高的CPU利用率。因此,一般情况下,while循环很少用于读取数据。

  3、多路复用 IO 模型

  多路IO模型是目前广泛使用的一种模型。

  Java NIO实际上是复用IO。在多路IO模型中,会有一个线程不断轮询多个套接字的状态,只有在套接字中存在真实的读写事件时,才会调用实际的IO读写操作。

  因为在复用IO模式下,只需要一个线程来管理多个socket,系统不需要建立新的进程或线程,也不需要维护这些线程和进程,IO资源只会在实际有socket读写事件的时候使用,所以大大减少了资源占用。

  在Java NIO中,selector.select()用于查询每个通道是否有到达事件。如果没有事件,它会一直被阻塞在那里,所以这个方法会导致用户线程的阻塞。

  复用IO模式,一个线程可以管理多个socket,只有socket中有真实的读写事件才会占用资源进行实际的读写操作。所以复用IO更适合连接数较多的情况。

  另外,复用IO的效率比非阻塞IO模型要高,因为在非阻塞IO中,套接字状态是通过用户线程不断查询的,而在复用IO中,轮询每个套接字状态都是由内核进行的,比用户线程效率高很多。

  但需要注意的是,多路IO模型通过轮询的方式检测是否有事件到达,并对到达的事件逐一响应。因此,对于多路IO模型,一旦事件响应体较大,就会造成后续事件延迟,影响新事件轮询。

  4、信号驱动 IO 模型

  在信号驱动IO模型中,当一个用户线程发起一个IO请求操作时,会为相应的socket注册一个信号函数,然后用户线程继续执行。当内核数据准备好时,一个信号将被发送到用户线程。用户线程收到信号后,会在信号函数中调用IO读写操作,执行实际的IO请求操作。

  5、异步 IO 模型

  异步IO模型是最理想的IO模型。在异步IO模型中,当用户线程启动读操作时,它可以立即开始做其他事情。

  另一方面,从内核的角度来看,当它进行异步读取时,它会立即返回,表明读取请求已成功发起,因此它不会为用户线程生成任何块。

  然后,内核将等待数据准备好,然后将数据复制到用户线程。当所有这些都完成后,内核将向用户线程发送一个信号,告诉它读操作已经完成。也就是说,用户线程根本不需要实际的整个IO操作,只需要先发起一个请求。当收到内核返回的成功信号时,表示IO操作已经完成,数据可以直接使用。

  也就是说,在异步IO模式下,IO操作的两个阶段都不会阻塞用户的线程。这两个阶段都由内核自动完成,然后发送一个信号通知用户线程操作已经完成。用户不需要再次调用IO函数进行具体的读写。

  这与信号驱动模型不同。在信号驱动模型中,当用户线程收到信号时,表示数据准备好了,然后用户线程需要调用IO函数进行实际的读写操作。在异步IO模式下,接收到的信号表示IO操作已经完成,不需要在用户线程中调用IO函数进行实际的读写操作。

  注意,异步IO是操作系统的底层支持。在Java 7中,提供了异步IO。这就是common JAVA中IO/NIO模型的细节。更多请关注我们的其他相关文章!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: