网站大量收购闲置独家精品文档,联系QQ:2885784924

ngix核心讲解.docVIP

  1. 1、本文档共85页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
ngix核心讲解

nginx核心讲解《上篇》 第零章 慕名对nginx的源码进行学习研究是早在2009年的事情,当时还在学校,整天呆在实验室里看动漫,时间一久就心感愧疚,觉得还是要趁有空学点东西,恰当时不知从哪里得知高性能服务器是一个很有“前途”的方向,几经有哪些信誉好的足球投注网站又机缘偶合的得识lighttpd与nginx,从此开始在动漫与代码之间来回穿梭,直到毕业。 关于lighttpd与nginx,无需多说,当时lighttpd比nginx要火,所以我先看的lighttpd源码,后看的nginx源码,也因此lighttpd的文档在我读书的时候就写完(虽然写得很矬)了,但nginx的文档写了一些放在电脑里,后来离开学校开始工作后,就把这件事情和这些文档都给搁在那了,直到近一年前,我建了一个个人博客站点(/),为了凑文章数目,才又把它们给找了出来,并且根据必威体育精装版的nginx源码重新整理了一下,也就是现在你看到的这篇文档。当然,这只是一部分,所以标题才叫《上篇》。 重新整理主要是因为注意到以前写的文档过细的去逐行注释代码(网上很多nginx源码分析的文章也大多有这个缺点),而此次希望能从比较高一点的角度去解析nginx,让读者尽快的把握全局而不是陷入细节;为了达到这个目标,文档里就尽量的少贴代码多画图,当然,一些必要的代码是不可缺少的,所以你还是会在本文档里看到源代码。虽然我的个人期望比较好,可惜水平比较差,目前写出来的文档也就这个样了。:) 最后,说一下本文档基于的相关环境,虽然列了一个表格如下,其实没那么复杂,我安装的是一个centos 6.2的32位虚拟机,其它开发软件包都是centos 6.2里所对应提供的,而nginx版本为1.2.0。 软件包 版本 nginx 1.2.0 os CentOS release 6.2 (Final)/kernel-2.6.32/32bit gcc gcc version 4.4.6(Red Hat 4.4.6-3) (GCC) gdb GNU gdb (GDB) Red Hat Enterprise Linux (7.2-50.el6) make GNU Make 3.81 文档版本(更新地址:/ebook/): 版本号 修订时间 0.1 2012-7-20 第一章 进程模型 nginx的进程模型和大多数后台服务程序一样,按职责将进程分成监控进程和工作进程两类,启动nginx的主进程充当监控进程,而由主进程fork出来的子进程则充当工作进程。工作进程的任务自然是完成具体的业务逻辑,而监控进程充当整个进程组的对外接口,同时对工作进程进行监护,比如如果某工作进程意外退出,监控进程将重新fork生成一个新的工作进程。nginx也可以单进程模型执行,在这种进程模型下,主进程就是工作进程,此时没有监控进程,单进程模型比较简单且官方建议仅供测试使用,所以下面主要分析多进程模型。 分析nginx多进程模型的入口函数为主进程的ngx_master_process_cycle()函数,在该函数做完信号处理设置等之后就会调用一个名为ngx_start_worker_processes()的函数用于fork产生出子进程(子进程数目通过函数调用的第二个实参指定),子进程作为一个新的实体开始充当工作进程的角色执行ngx_worker_process_cycle()函数,该函数主体为一个无限for循环,持续不断的处理客户端的服务请求,而主进程继续执行ngx_master_process_cycle()函数,也就是作为监控进程执行主体for循环,这也是一个无限循环,直到进程终止才退出,服务进程基本都是这种写法,所以不用详述,下面先看看这个模型的图示: 上图中表现得很明朗,监控进程和工作进程各有一个无限for循环,以便进程持续的等待和处理自己负责的事务,直到进程退出。 监控进程的无限for循环内有一个关键的sigsuspend()函数调用,该函数的调用使得监控进程的大部分时间都处于挂起等待状态,直到监控进程接收到信号为止,当监控进程接收到信号时,信号处理函数ngx_signal_handler()就会被执行,我们知道信号处理函数一般都要求足够简单(关于信号处理函数的实现准则请Google),所以在该函数内执行的动作主要也就是根据当前信号值对相应的旗标变量做设置,而实际的处理逻辑必须放在主体代码里来处理,所以该for循环接下来的代码就是判断有哪些旗标变量被设置而需要处理的,比如ngx_reap(有子进程退出?)、ngx_quit或ngx_terminate(进行要退出或终止?注意:虽然两个旗标都是表示结束nginx,不过ngx_quit的结束更优雅,它会让nginx监控进程做一些清理工作且等待子进程也完全清

文档评论(0)

phltaotao + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档