Chinaunix首页 | 论坛 | 博客
  • 博客访问: 402313
  • 博文数量: 87
  • 博客积分: 2571
  • 博客等级: 少校
  • 技术积分: 920
  • 用 户 组: 普通用户
  • 注册时间: 2009-12-29 13:10
文章分类

全部博文(87)

文章存档

2012年(49)

2011年(7)

2010年(26)

2009年(5)

分类: LINUX

2011-12-30 13:49:18

基于nginx-1.1.7

src/
core/ 该目录存放核心基础模块的代码,也是Nginx服务的入口
event/ Nginx 自身对事件处理逻辑的封装
http/ HTTP协议处理模块的代码,Nginx作为WEB服务器和代理服务器运行时的核心模块
mali/ Mail处理模块的代码,Nginx作为pop3/imap/smtp代理服务器运行时的核心模块
misc/ nginx 的一些utils,定义了test和profiler的一些外围模块的逻辑
os/ Nginx对各个平台抽象逻辑的封装,目前只有unix系
Nginx可以开启多个进程,每个进程拥有最大上限128个子线程以及一定的可用连接数。
如果希望使用线程可以在配置文件中设置worker_threads这个参数,但这个参数在Nginx官方手册上没有。
只有通过阅读源代码才看到。最大客户端连接数等于进程数与连接数的乘积,连接是在主进程中初始化的,一开始所有连接处于空闲状态。

每一个客户端请求进来以后会通过事件处理机制,在Linux是Epoll,在FreeBSD下是KQueue放到空闲的连接里。

如果设置了线程数,那么被填充的连接会在子线程中处理,否则会在主线程中依次处理。
如果解析出是动态脚本请求,会根据fast-cgi的设置访问php-cgi进程,php进程数量的多少依据php-fpm.conf中max_children的设置。
因此Nginx的动态请求能力不仅仅依靠Nginx本身的设置,还要调试php-fpm。


从源代码级别上看nginx由以下几个元素组成:

1. worker(进程)
2. thread(线程)
3. connection(连接)
4. event(事件)
5. module(模块)
6. pool(内存池)
7. cycle(全局设置)
8. log(日志)
connection和event是按照链表的方式进行存放的,区别在于connection是单向链表而event是双向链表。
nginx由若干模块组成,但所有模块全部采用静态编译的办法。
阅读(2094) | 评论(1) | 转发(1) |
0

上一篇:【笔记】haproxy

下一篇:ngnix内存池

给主人留下些什么吧!~~

校长的马夹2011-12-30 22:08:35

恩,学习了!