logo

面试题

No.11:Nginx 为什么比 Apache 性能强?

Nginx 比 Apache 性能强的原因主要有以下几点:

  1. Nginx 利用了 Linux Kernel 新引入的名为 epoll 的 I/O 多路复用 API。epoll 是一种高效的 I/O 事件通知机制,它可以同时监听多个文件描述符,当其中任何一个文件描述符就绪时,就会触发相应的事件。这样,Nginx 可以在一个线程中处理多个连接,提高了并发处理能力。

  2. Nginx 以流量转发作为设计目标。它采用了事件驱动的异步非阻塞模型,可以高效地处理大量的并发连接。而 Apache 是从标准的磁盘文件和 CGI 协议出发的一个 Web 容器,内部的很多设计都是基于进程和阻塞的,所以在处理大量并发连接时性能较差。

  3. Nginx 使用了一些优化策略来提高性能,例如:

    • 使用了轻量级的 HTTP 协议解析器,减少了内存消耗。
    • 使用了共享内存的方式存储会话信息,避免了频繁的磁盘 I/O。
    • 使用了缓存技术,减少了对后端服务器的请求压力。

No.12:epoll 为什么能够处理海量的 TCP 连接?

epoll 能够处理海量 TCP 连接的原因是它采用了事件驱动的方法来优化 TCP 连接和线程的匹配过程。

在传统的 select 方法中,每当收到一个数据包时,都需要遍历现存的所有连接。当连接数达到数千个时,寻找匹配关系的操作就会变得非常慢,甚至需要占据一整个 CPU 核心,导致性能无法继续提升,其他客户端也无法与服务器建立新的 TCP 连接。

而 epoll 通过将正向匹配流程反过来,基于事件驱动实现了高效的 TCP 连接与线程的匹配。具体来说,当接收到数据后,epoll 会通过二叉树快速找到所属的文件,并主动执行该文件对应的回调函数。这个操作大幅提高了处理海量 TCP 连接数时的效率。

阅读数:12      字数:615 最后更新:2023-10-26 00:40:29