nginx源码线程池(nginx默认worker线程数)
nginx默认worker线程数
这个还真不能一句话概况,我博客写了一长篇关于线程安全的,我提炼了下面这段,看懂也基本够了:
单线程不会有安全问题,多线程编程才会有安全问题,根本在于是否存在critical resource竞争资源,如果多线程不会访问竞争资源就不存在安全问题,否则则要处理,
什么是竞争资源呢,具体如下:
如果是各自访问其上下文context的资源,比如kafka consumer partition worker线程访问各自的storage则是互相不打扰的;
如果执行的某个方法内只用到了局部变量,由于局部变量位于各自thread的栈里,所以互不干扰;
如果执行的某个方法用到了传入的变量,也就是所谓的形式参数变量,则要看这个传入的变量是否是object,如果只是普通的参数则没关系,如果是对象,要看对象是否是同一个引用,不同引用没有关系;
如果执行的某个方法内用到了同一个引用,不管是传入的还是外部全局的变量,比如log4的logger,由于log4已经做好了线程安全写log,所以不用担心;
如果执行的某个方法内用到了同一个引用:
i)但是只是读没有写,读和读是没有冲突的,也没有关系;
ii)都有写,但是写不依赖于读,即线程不需要获取“最新”数据就可以直接写入覆盖,这种情况也没有关系;
iii)都有写,而且写依赖于读到最新数据,则需要处理;
nginx的worker进程
nginx配置如下:
1、定义worker进程数:
worker_processes 10;
2、定义worker进程可同时服务请求数目:
worker_connections 1024;
3、禁止使用sendfile函数:
sendfile off;
4、开启空闲连接的文件检查:
linger_on_close on;
5、定义多个进程间通信存放文件路径及名称:
pid /var/run/nginx.pid;
6、定义用户和组:
user nobody nogroup;
7、定义worker进程数量:
worker_processes 10;
8、定义最大请求进程时间:
client_body_timeout 10;
9、定义服务的超时时间:
send_timeout 10;
10、打开目录列表功能:
autoindex on;
nginx线程数怎么设置
Nginx 是一个高性能的 Web 服务器,能够同时处理大量的并发请求。它结合多进程机制和异步机制 ,异步机制使用的是异步非阻塞方式 。
Nginx 的多线程机制和异步非阻塞机制 。
1、多进程机制
服务器每当收到一个客户端时,就有 服务器主进程 ( master process )生成一个 子进程( worker process )出来和客户端建立连接进行交互,直到连接断开,该子进程就结束了。
使用进程的好处是各个进程之间相互独立,不需要加锁,减少了使用锁对性能造成的影响,同时降低了编程的复杂度和开发成本。
2、异步非阻塞机制
每个工作进程 使用 异步非阻塞方式 ,可以处理多个客户端请求 。
当某个 工作进程 接收到客户端的请求以后,调用 IO 进行处理,如果不能立即得到结果,就去 处理其他请求 (即为 非阻塞 );而 客户端 在此期间也 无需等待响应 ,可以去处理其他事情(即为 异步 )。
nginx 工作线程
1、Nginx基本工作原理
NGINX以高性能的负载均衡器,缓存,和web服务器闻名。Nginx由内核和模块组成,其中,内核的设计非常微小和简洁,完成的工作也非常简单,当它接到一个HTTP请求时,仅仅通过查找配置文件将客户端请求映射到一个location block(location是Nginx配置中的一个指令,用于URL匹配),而在这个location中所配置的每个指令将会启动不同的模块去完成相应的工作。
因此模块可以看做Nginx真正的劳动工作者。通常一个location中的指令会涉及一个handler模块和多个filter模块(当然,多个location可以复用同一个模块)。handler模块负责处理请求,完成响应内容的生成,而filter模块对响应内容进行处理。
Nginx的模块直接被编译进Nginx,因此属于静态编译方式。启动Nginx后,Nginx的模块被自动加载,不像Apache,首先将模块编译为一个so文件,然后在配置文件中指定是否进行加载。在解析配置文件时,Nginx的每个模块都有可能去处理某个请求,但是同一个处理请求只能由一个模块来完成。
nginx 线程
Nginx会按需同时运行多个进程:一个主进程(master)和几个工作进程(worker),配置了缓存时还会有缓存加载器进程(cache loader)和缓存管理器进程(cache manager)等。Nginx主要通过“共享内存”的机制实现进程间通信。主进程以root用户身份运行,而worker、cache loader和cache manager均应以非特权用户身份运行。 在工作方式上,Nginx分为单工作进程和多工作进程两种模式。在单工作进程模式下,除主进程外,还有一个工作进程,工作进程是单线程的;在多工作进程模式下,每个工作进程包含多个线程。Nginx默认为单工作进程模式。
本网站文章仅供交流学习 ,不作为商用, 版权归属原作者,部分文章推送时未能及时与原作者取得联系,若来源标注错误或侵犯到您的权益烦请告知,我们将立即删除.