工作模式:
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来讲,一个进程只有一个主线程,通过异步非阻塞的事件处理机制,实现了循环处理多个准备好的事件,从而实现轻量级和高并发。
网友评论