apache和nginx的区别

工作模式:

apache 有3种模式perfork,worker,event模式 (多进程处理)

  • perfork: 每个子进程只有一个线程

进程相对占用资源,消耗大量内存,不擅长处理高并发的场景


image.png
  • worker:多进程和多线程的混合模式

在高并发的场景下会比prefork有更多可用的线程,表现会更优秀一些,在使用keep-alive长连接的时候,某个线程会一直被占用,即使中间没有请求,需要等待到超时才会被释放,资源浪费


image.png
  • event

解决了keep-alive长连接的时候占用线程资源被浪费的问题,增强了在高并发场景下的请求处理。在event工作模式中,会有一些专门的线程用来管理这些keep-alive类型的线程,当有真实请求过来的时候,将请求传递给服务器的线程,执行完毕后,又允许它释放。


image.png

查看我们的Apache的工作模式呢?

httpd -V

configure配置编译参数的时候,可以使用 --with-mpm=prefork|worker|event来指定编译为那一种MPM,当然也可以用编译为三种都支持:--enable-mpms-shared=all,这样在编译的时候会在modules目录下自动编译出三个MPM文件的so,然后通过修改httpd.conf配置文件更改MPM

nginx的select和poll和epoll:(多进程)

  • select:轮询 :最大连接数1024
  • poll:没有最大连接数的限制,原因是它是基于链表来存储的
  • epoll:模式单线程异步非阻塞。

工作原理


image.png

Nginx如何实现高并发:

异步非阻塞的事件处理,比如 epoll
对于Nginx来讲,一个进程只有一个主线程,通过异步非阻塞的事件处理机制,实现了循环处理多个准备好的事件,从而实现轻量级和高并发。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。