游世集

遨游人世,累文一集

  IT博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  87 随笔 :: 0 文章 :: 27 评论 :: 0 Trackbacks
<2025年4月>
303112345
6789101112
13141516171819
20212223242526
27282930123
45678910

公告

我所写的东西,并未打算公开,纯属私人性质的随笔。如果您来到了这里,那么我欢迎你。如果这里有不符合您价值观的言语,请一笑了之;如果我有不太成熟的思想,请您指教。谢谢。

常用链接

留言簿(3)

随笔分类(87)

随笔档案(87)

相册

收藏夹(2)

Emacs

Linux/Unix

PHP

WEB

其他的Blog

其它

文化

搜索

积分与排名

最新评论

阅读排行榜

评论排行榜

      在phpchina上有朋友谈到了这个问题,由于对这个问题一直也不太清楚,所以就转一下资料。

The Challenge - PHP on Windows

尽管PHP是一个多平台语言,在Windows上运行PHP还是一个挑战。这是因为PHP是基于UNIX平台开发的,每个请求由一个不同的进程来处理。然 而在Windows平台下面,同一类型的请求是由同一进程的不同线程来处理的。这个区别意味运行着PHP的IIS的频繁崩溃。进一步来说,对这一问题的唯 一的解决方案就是把PHP运行在外部方式下(CGI)。最终导致PHP性能的降低。

Multi-threading:

PHP was originally written for a multi-process environment (Apache) and is therefore most commonly used with the popular LAMP (Linux, Apache, MySQL, PHP) platform. Under Windows, things work differently. Literally all of the Web Servers under Windows, including IIS and Apache, are multi-threaded, which means that a single process handles all concurrent clients. For PHP to run properly under a multithreaded server, it must be designed with Thread Safety in mind. Failure to do so will cause instability and may often result in unexpected crashes. To make things worse, a crash in a multithreaded environment will typically cause the entire Web Server to go down, as opposed to multi-process environment, where a typical crash will only affect one request and can generally go unnoticed.

Up until today, the only way to prevent PHP crashes on Windows was to run PHP as an external process to the Web Server via CGI.


CGI:

CGI stands for "Common Gateway Interface". CGI is a communication platform for a Web Server to speak with Web Server applications such as PHP. CGI was created as the standard interface for Web Server applications. Its main benefits are simplicity, language independence and most importantly - process isolation. This isolation prevents known bugs in PHP from crashing the Web Server. CGI also has some significant drawbacks - mainly performance. The CGI mechanism involves huge overhead resulting in poor performance caused by the initialization of a new PHP process for each request, and then its shuts down when the request is done.



Native Web Server Modules:

In response to the performance problems of CGI, several vendors have developed APIs for their servers. Well-known APIs are NSAPI from Netscape and ISAPI from Microsoft. The APIs enable PHP to run in the server process, which is persistent across all requests, saving initialization overhead. APIs are naturally used when PHP is run on a single process server, but that’s not the case for multi-threading servers. While parts of PHP were rewritten to make it thread-safe, the thread-safe version never matured to be as stable and as efficient as the multi-process version. In a nutshell, the smallest bug in PHP, one of its modules, or one of the 3rd party libraries that it uses, that causes one thread to become corrupted, can infiltrate all server threads and bring the entire server down. For that reason, implementing PHP on Windows using a native server plug-in (whether IIS or Apache) proved to be impractical, resulting in frequent, yet random crashes.

posted on 2005-12-26 09:15 xlmo 阅读(1976) 评论(4)  编辑 收藏 引用 所属分类: php

评论

# re: 为什么PHP在Windows上的性能要比在linux或unix下性能低? 2007-07-06 17:30 zxsadas
神经病,php也有isapi 模式的,cgi 模式只是其中一种

windows 本身性能就低  回复  更多评论
  

# 用windows2003+iis6.0+php平凡报IIS Worker Process遇到问题而且必须关闭" 2007-07-09 11:17 遇到相同情况
这个区别意味运行着PHP的IIS的频繁崩溃.就是啊。失败啊。  回复  更多评论
  

# re: 为什么PHP在Windows上的性能要比在linux或unix下性能低? 2008-03-04 13:26 SB
@zxsadas
弱智狗 你怎么知道的?  回复  更多评论
  

# re: 为什么PHP在Windows上的性能要比在linux或unix下性能低? 2008-03-04 13:27 SB
windows 本身性能就低
-----------------------
弱智狗 你怎么知道的? 说个理由 不然我当你吃屎了  回复  更多评论
  

只有注册用户登录后才能发表评论。