I/O就是对缓冲区的操作
I/O多路复用使得程序能同时监听多个文件描述符能够提高程序的性能
I/O多路复用是一种有效的处理多个I/O事件的机制,允许一个单独的进程或线程来监视多个文件描述符(sockets、文件、设备等),并在其中任何一个描述符准备好进行读取、写入或是异常处理时进行相应的操作。Liux下实现I/O多路复用的系统调用主要有select、poll和epoll。
进行Socket通信时,I/O操作可分为阻塞IO和非阻塞IO
-
1.BIO(Blocking I/O):
-
阻塞模型: 在BIO模型中,当应用程序发起I/O操作(例如读取或写入数据)时,它会被阻塞,直到操作完成。这意味着线程会一直等待,直到数据被读取或写入完成,然后才能继续执行其他操作。
-
线程模型: 通常,每个I/O操作都由一个单独的线程处理。这样的模型可能导致系统创建大量的线程,因为每个连接都需要一个线程,这可能会影响系统的性能和资源利用率。
-
简单易用: BIO模型相对简单易用,因为它的工作方式类似于同步编程模型,但在高并发环境中可能效率较低。
-
-
2.NIO(Non-blocking I/O):
-
非阻塞模型: 在NIO模型中,应用程序可以继续执行其他操作,而不必等待I/O操作完成。当I/O操作完成时,应用程序会收到通知。
-
选择器(Selector): NIO引入了选择器的概念,允许一个线程管理多个通道。这样,一个线程可以有效地管理多个连接,而不必为每个连接创建一个线程。
-
事件驱动: NIO模型通常是事件驱动的,当数据准备好进行读取或写入时,会触发相应的事件,而不是一直等待。
-
更适用于高并发: NIO模型在处理大量连接时通常更有效,因为它减少了线程的数量,提高了系统的可伸缩性。
-