Nginx is a lightweight event-driven HTTP and reverse proxy server for web, as well as mail server.
Apache: Thread/Process Oriented.
C10K challenge?
网络服务在处理数以万计的客户端连接时,往往出现效率低下甚至完全瘫痪,这被称为 C10K 问题。
C10K 问题的最大特点是:设计不够良好的程序,其性能和连接数及机器性能的关系往往是非线性的。举个例子:如果没有考虑过 C10K 问题,一个经典的基于 select的程序能在旧服务器上很好处理 1000 并发的吞吐量,它在 2 倍性能新服务器上往往处理不了并发 2000 的吞吐量。 这是因为在策略不当时,大量操作的消耗和当前连接数 n 成线性相关。会导致单个任务的资源消耗和当前连接数的关系会是 O(n)。而服务程序需要同时对数以万计的socket 进行I/O处理,积累下来的资源消耗会相当可观,这显然会导致系统吞吐量不能和机器性能匹配。为解决这个问题,必须改变对连接提供服务的策略。
Nginx Solution: Event-driven Architecture/Single Non-blocking Thread
Event-driven: What is it?
一个简单例子就是:
1)接受请求
2)触发一个进程里的事件(event)
3)进程处理并返回结果
Nginx与Apache最大的不同就是处理事务的机制不一样:
Apache常用工作方式下,每个请求会独占一个工作线程,当并发数上到几千时,就同时有几千的线程在处理请求了。这对操作系统来说,是个不小的挑战,线程带来的内存占用非常大,线程的上下文切换带来的 cpu 开销很大,自然性能就上不去了。
而Nginx采用的是异步非阻塞的事件处理机制,后面文章会提到。
原文地址:http://blog.csdn.net/kzq_qmi/article/details/46432557