I/O多路复用

发布时间:2023年12月31日

I/O就是对缓冲区的操作

????????I/O多路复用使得程序能同时监听多个文件描述符能够提高程序的性能

????????I/O多路复用是一种有效的处理多个I/O事件的机制,允许一个单独的进程或线程来监视多个文件描述符(sockets、文件、设备等),并在其中任何一个描述符准备好进行读取、写入或是异常处理时进行相应的操作。Liux下实现I/O多路复用的系统调用主要有select、poll和epoll。

????????进行Socket通信时,I/O操作可分为阻塞IO和非阻塞IO

  1. 1.BIO(Blocking I/O)

    • 阻塞模型: 在BIO模型中,当应用程序发起I/O操作(例如读取或写入数据)时,它会被阻塞,直到操作完成。这意味着线程会一直等待,直到数据被读取或写入完成,然后才能继续执行其他操作。

    • 线程模型: 通常,每个I/O操作都由一个单独的线程处理。这样的模型可能导致系统创建大量的线程,因为每个连接都需要一个线程,这可能会影响系统的性能和资源利用率。

    • 简单易用: BIO模型相对简单易用,因为它的工作方式类似于同步编程模型,但在高并发环境中可能效率较低。

?

  1. 2.NIO(Non-blocking I/O)

    • 非阻塞模型: 在NIO模型中,应用程序可以继续执行其他操作,而不必等待I/O操作完成。当I/O操作完成时,应用程序会收到通知。

    • 选择器(Selector): NIO引入了选择器的概念,允许一个线程管理多个通道。这样,一个线程可以有效地管理多个连接,而不必为每个连接创建一个线程。

    • 事件驱动: NIO模型通常是事件驱动的,当数据准备好进行读取或写入时,会触发相应的事件,而不是一直等待。

    • 更适用于高并发: NIO模型在处理大量连接时通常更有效,因为它减少了线程的数量,提高了系统的可伸缩性。

?

?

文章来源:https://blog.csdn.net/leimeili/article/details/135277522
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。