阅读内容 

Apache 性能最优化分析(13)

[日期:2004-07-24] 来源:天极网  作者: [字体: ]
附录:预分支(Pre-Forking)模型

  Unix上的Apache是应用了预分支模型的服务器。父进程的责任仅在于繁衍子进程,它从不响应来自socket的任何请求。真正处理连接的是子进程,每个子进程在终止之前会(逐一地)为多个连接服务。父进程根据服务器负载的变化(通过监视记分板,记分板由子进程负责保持同步)生成新的或者杀掉旧的子进程。

  这种模型为服务器提供了其他模型所不具备的健壮。父进程的代码非常简单,它有足够的信心保证在不出现错误的情况下持续运行。子进程就很复杂了,而且当您加入了第三方提供的模块后,将冒segmentation fault和其他崩溃的危险。即便这样的事情发生了,也只会影响到一个连接。父进程将继续为请求服务,并迅速替换掉已经死亡的子进程。

  预分支在不同的Unix之间有良好的可移植性。Apache向来将它作为重要的目标之一,并且将保持下去。

  但预分支模型由于各种各样的性能问题而饱受批判。主要的因素是分支进程带来的负担、上下文切换带来的负担和多个进程为内存带来的负担。另外它不能为请求提供有效的缓存机制(比如mmap文件池)。另有一些模型。JAWS project的论文对它们进行了详细的分析。实际上,所有这些模型带来的性能损失在不同操作系统上的差别迥异。

  Apache的内核代码已经支持多线程。NT上的Apache 1.3就是多线程的。至少有另外两种实验性的多线程Apache:一个基于1.3内核并运行在DCE上;另一个基于1.0内核,它使用了一套自定义的用户级线程库。它们都不是对公众发行的。有一个已经发行了的Apache实验版本:运行于Netscape运行时可移植(Portable Run Time)平台上的1.3版,可以在此下载(如果您准备使用它的话,欢迎您加入new-httpd邮件列表)。被重新设计的Apache2.0将包含抽象化的服务器模型,它使我们可以既支持预分支模型,又支持多种线程模型。
阅读:
录入:

推荐 】 【 打印
相关新闻      
本文评论       全部评论
发表评论
  • 尊重网上道德,遵守中华人民共和国的各项有关法律法规
  • 承担一切因您的行为而直接或间接导致的民事或刑事法律责任
  • 本站管理人员有权保留或删除其管辖留言中的任意内容
  • 本站有权在网站内转载或引用您的评论
  • 参与本评论即表明您已经阅读并接受上述条款


点评: 字数
姓名:
Advertisement
内容查询


Advertisement