nginx底层原理学习笔记

异步非阻塞 I/O :
异步非阻塞 I/O 是一种处理 I/O 操作的方式,它的主要思想是:在等待 I/O 操作完成的同时,让程序继续执行其他任务,而不是像传统的阻塞 I/O 一样等待 I/O 操作完成后再继续执行程序。下面是异步非阻塞 I/O 的通俗理解:
假设你要煮一锅粥,你可以选择两种方式:
阻塞 I/O:你在煮粥的过程中,等待粥煮熟,不能做其他事情。当粥煮熟了,你才能继续处理粥,比如加盐、调味等等。
异步非阻塞 I/O:你在煮粥的过程中,可以同时处理其他事情,比如准备菜、切菜等等。当粥煮熟了,你会收到通知,可以立即去处理粥,比如加盐、调味等等。
可以看出,异步非阻塞 I/O 可以让程序在等待 I/O 操作的同时继续执行其他任务,提高程序的并发性能和响应速度。异步非阻塞 I/O 的实现方式包括事件驱动模型和回调函数模型,常见的异步非阻塞 I/O 的 API 包括 epoll、kqueue、IOCP 等。
在网络编程中,异步非阻塞 I/O 可以用于处理网络连接和数据传输,比如在处理客户端请求时,可以采用异步非阻塞 I/O 的方式来处理网络连接和数据传输,以提高服务器的并发性能和响应速度。

多路复用:
多路复用是指在一个进程中,通过同时监听多个 I/O 事件(例如网络套接字的读写事件),来提高程序的性能。多路复用可以用于实现并发网络编程,使程序能够同时处理多个连接,提高程序的吞吐量和响应速度。
常用的多路复用技术包括 select、poll、epoll 等。这些技术可以同时监听多个文件描述符的 I/O 事件,当有事件发生时,就会通知程序进行相应的处理。
多路复用的优势在于可以避免创建大量的线程或进程来处理网络连接,减少了上下文切换的开销,同时也避免了多个线程竞争同一个连接带来的问题。此外,多路复用也可以降低程序的资源占用,因为在任何时刻,只有少数连接是活跃的,而大多数连接都是空闲的,不需要占用 CPU 资源。

I/O多路复用:
I/O多路复用是一种在单个线程中同时监听多个I/O流的机制,也称为事件驱动I/O。它的主要思想是:在一个线程中同时监视多个I/O(文件描述符)流,当其中任意一个I/O流有事件发生时,操作系统会通知该线程,线程就可以进行相应的处理,这样就避免了多线程中频繁的上下文切换,提高了程序的效率。
以一个简单的聊天室为例,假设该聊天室需要监听多个客户端的连接,并在有新消息时进行相应的处理。如果使用传统的阻塞 I/O 模型,每个连接都需要一个单独的线程进行处理,这样会带来大量的线程开销和上下文切换。而使用 I/O 多路复用技术,则可以通过一个线程来同时监听多个连接,只有在有数据到达时才进行相应的处理,从而大大减少了系统开销。
在具体实现上,I/O 多路复用通常使用 select、poll 或 epoll 等系统调用来进行文件描述符的监听,这些调用会阻塞等待文件描述符上的事件,并在有事件发生时返回事件的类型和相应的文件描述符,程序可以根据返回的事件类型来判断需要进行何种操作(如读或写),从而完成相应的 I/O 操作。
总之,I/O 多路复用是一种高效的 I/O 操作方式,能够极大地提高系统的性能和可扩展性,特别是在需要同时处理多个 I/O 事件的场景下,更是可以大显身手。

select、poll 或 epoll模型之间的区别:
1、select
模型select 是一种最古老的多路复用技术,支持的文件描述符数目有限,通常默认情况下是 1024 个。当 I/O 事件触发时,**select 函数需要轮询整个文件描述符集合,找到就绪的文件描述符。**由于每次调用都需要传入整个描述符集合,所以随着描述符数目的增加,select 的效率会变得越来越低。
2、poll
模型poll 与 select 类似,但它没有限制文件描述符的数量。在 I/O 事件触发时,poll 函数需要轮询整个描述符集合,找到就绪的描述符。与 select 不同,poll 通过链表来存储描述符集合,可以支持更多的描述符。

3、epoll
模型epoll 是一种 Linux 内核特有的 I/O 事件通知机制。它使用红黑树来存储文件描述符,可以支持更多的文件描述符。当一个 I/O 事件发生时,只需要通知已经就绪的文件描述符,而不需要像 select 和 poll 一样轮询整个描述符集合。 因此,epoll 的效率比 select 和 poll 更高。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值