nginx
来源:互联网 发布:linux注销命令shutdown 编辑:程序博客网 时间:2024/06/07 03:25
nginx架构
1.nginx进程模型
nginx启动之后,会启动一个master进程和若干个worker进程,master进行接受网络请求会分配给worker进行处理
操作nginx只需要和master进行通讯即可,master会管理好他自己的worker小弟的
如果想要重启nginx,可以kill -HUP pid,master进程接收到这个命令之后会重新加载配置文件,之后从容重启服务,其中服务不会间断
在nginx0.8版本之后,可以使用./nginx -s reload替代
2.worker进程如何处理请求
在master进程中建立好了listen的socket(listenfd),然后fork出多个worker进程,所有worker进程的listenfd都会在新链接到来时变得可读,然后所有worker进程在注册listenfd事件之前,抢accept_mutex,抢到互斥锁的进程注册listenfd读事件,在读事件里面调用accept接受该连接。
3.nginx进程模型的好处
彼此独立,互不干扰
4.如何高并发
nginx使用多个独立worker进程,每个worker进程中只有一个主线程工作,如何保证高并发呢
nginx采用异步非阻塞方式处理请求,异步非阻塞的定义如下
首先,从一个完整的请求过程来看,请求过来,建立连接,接收数据,处理数据,发送数据,具体到系统底层,就是读写事件,这里我们如果使用阻塞方式,只能等待事件处理完毕才能继续,这样会导致CPU的大量浪费;所以我们使用非阻塞的方式,如果是非阻塞,进程需要一直询问事件是否处理完毕,这样开销也不小,这时候引入了异步,设置超时时间,如果超时时间内准备完毕,我们就去处理。
所以,这里的并发请求,是指未处理完的请求,线程只有一个,同时处理的请求也只有一个,知识请求间的不断切换。
这种方式和多线程相比,不需要创建线程,请求占用内存少,没有上下文切换,事件处理非常轻量级;并发数再多也不会导致无谓的资源浪费(上下文切换)。24G内存的机器上,处理的并发数请求达到过200W。
所以,推荐worker数为cpu的核数,减少不必要的上下文切换和资源竞争。
5.基本的web服务器,事件通常有网络事件、信号、定时器
网络事件可以通过异步非阻塞处理,那么信号和定时器呢
信号的处理:如果nginx正在等待事件,程序收到信号,会先处理信号,事件返回错误,然后重新进入事件。
nginx基础概念
1.connection
2.request
3.keepalive
4.pipe
5.lingering_close
nginx基本数据结构
1.ngx_str_t
2.ngx_pool_t
3.
- nginx
- Nginx
- Nginx
- Nginx
- Nginx
- nginx
- nginx
- nginx
- nginx
- nginx
- nginx
- nginx
- nginx
- Nginx
- nginx
- nginx
- nginx
- nginx
- MySQL常用的命令大全
- iOS 动画Animation详解, UIView动画,CALayer动画
- 你的态度决定你的未来
- android把自己的应用加入到系统分享中
- get 请求 URL中传送一个变量
- nginx
- hash code、equals和“==”三者的关系
- Assembly Intro - An Introduction to the SSE Instruction Set
- 生成随机数
- MySQL主从同步配置
- 只能输入0-9的数字和小数点和-号
- 需求 - 3 - 长按菜单栏
- CDN服务哪家稳?阅兵直播见端倪
- MyEclipse关于Debug模式下不能启动JSP文件的问题解决方案集合