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.





0 0
原创粉丝点击