I/O多路复用
2023-12-31 18:16:32
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模型在处理大量连接时通常更有效,因为它减少了线程的数量,提高了系统的可伸缩性。
-
?
?
文章来源:https://blog.csdn.net/leimeili/article/details/135277522
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!