异步I/O这里的I/O是指谁和谁的I/O?

来源:8-1 内核IO模型

慕田峪2263497

2020-02-16

  1. 应用程序:对应的是客户端吗?
  2. 系统内核:对应的是系统网卡在内存中的缓存吗?
  3. 这里的异步?到底是服务端和客户端的异步,还是服务端和操作系统内核的异步?
  4. NIO模型中,当selector设置为非阻塞模式的时候,这里的noblocking指的是客户端与服务端发送消息的IO操作处于非阻塞状态,实际上客户端和服务端的网络连接还是存在的是吗?
  5. BIO模型中,这个blocking阻塞的是客户端与服务端之间发送消息的IO操作是吧,客户端与服务端连接状态一直保持。换句话说,如果是BIO模型,服务端只accept,然后不做任何消息IO操作的处理。其实服务端是可以支持很多客户端连接的是吧。之所以tomcat不能有那么多连接,是因为客户端与服务端之间消息传递IO(非accept连接)需要创建大量的线程,导致服务器资源崩溃。是这样的吗?
写回答

1回答

Stannum

2020-03-16

同学你好~

  1. 这里的应用程序是概括的指代任何需要进行I/O操作的应用,包括了服务器端应用程序,和客户端应用程序

  2. 这里的系统内核,指的是比应用程序更低一层的系统内核程序,内核提供了对包括网卡在内的硬件进行访问的接口

  3. 是的,阻塞与非阻塞的概念,指的是I/O操作调用时的特性(同学可以再回顾一下3-4来理解阻塞与非阻塞的概念)。而连接本身当然是存在的,是我们进行任何I/O操作的基础

  4. 在BIO模型中,服务器端的accept调用,和双方的read/write调用,都是阻塞性的。所以我们才需要使用多线程来尽可能的同时处理与多个客户端之间的I/O操作。你说的很对,BIO模型的局限主要就在于它的可伸缩性太小。随着客户连接的增加,线程数跟着增加,最终会耗尽系统资源而崩溃

0
0

系统学习Java网络编程 深度理解BIO/NIO/AIO

对比式学习助你真正理解BIO/NIO/AIO三大网络编程模型。

880 学习 · 148 问题

查看课程