13年企业网站建设经验,已累计为上百家企业提供全方位互联网服务
来源:鞍山网站建设浏览次数:次来源:https://www.aswz.cn/know/303.html
就在PHP潮水般涌来的时候,国外主机商已经早已把虚拟主机平台的中心移到Linux,国内为何还迟迟停留在Windows上运行php呢?究其原 因是之前asp+access的应用比较普及;网站工作室更容易接触到windows;空间服务商对windows系统比较熟悉而不愿把php的运行环境 设置到陌生的Linux,导致正真的Linux平台上完美运行PHP网站的虚拟主机一直没有诞生。
PHP是Linux的原生服务,运行到Windows上究竟有什么不好呢?
尽管PHP是一个多平台语言,在Windows上运行PHP还是一个挑战。这是因为PHP是基于UNIX平台开发的,每个请求由一个不同的进程来处 理。然而在Windows平台下面,同一类型的请求是由同一进程的不同线程来处理的。这个区别意味运行着PHP的IIS的频繁崩溃。进一步来说,对这一问 题的唯一的解决方案就是把PHP运行在外部方式下(CGI)。最终导致PHP性能的降低。关键问题还是以下几点:
多线程:
PHP原生为多处理器环境(APACHE),因此最常用于LAMP (Linux, Apache, MySQL, PHP) 平台。windows的工作方式不同,web服务器,不管是iis还是apache都是多线程运行,即一个处理器上跑所有客户请求。为了使php在多线服 务器上跑的好,必须考虑线程安全的问题。如果线程安全处理失败,会导致php运行不稳定是当然的,同时是iis或apache崩溃的情况也经常发生。还有 更糟糕,一个崩溃的线程会导致整个web服务器挂掉,这也是为什么iis进程池会频繁的崩溃。相对于多进程环境,就算一个进程崩溃又有什么关系,第web 服务器没有影响,下一个请求来的时候自动唤醒一个新的进程就可以了,就跟没发生过一样。时至今日,唯一防止php在windows上崩溃的做法还是把 php设置为外部CGI,但会比ISAPI慢很多。
CGI:
CGI表示 “通用网关接口”。CGI是一个联接平台,用于web服务器和web应用程序之前的对话连接,PHP就是CGI。CGI按照web服务器的应用标准被创 建,接口的好处是简单,更重要是和开发语言无关,而且相互直接是隔离的。这种隔离方式有效的阻止了崩溃程序错误引起的web服务器崩溃。要知道2003 sp2之前的asp程序错误会异常频繁引起整个web服务器崩溃,可想而知当时的主机商是生活在地狱中一样。CGI并都是好处,显着地缺点是-严重的拖慢 服务器性能。CGI 机制本身就包含了巨大的系统开销,为一个新的请求生成PHP进程的初始化工作最终导致了极端的性能地下,一个新进程的生成需要的内存分配和代码载入对于每 次http请求都要重复一次,而且请求结束后还会清理掉,对操作系统来说是严重的拖累。
本地web服务器模块:
为了解决CGI的性能问题,web服务器提供商会提供为web服务器提供API。知名的API包括netscape的NSAPI和MS的 ISAPI. 这些API支持PHP跑在几个服务进程里面,每个处理进程处理一组请求,而不是一个,这样做能节约进程初始化的过多开销。API运行在单个处理器上,但不 是多线程的服务器。当部分PHP被修改成线程安全的,那线程安全版本绝不会比多进程版更稳定和高效。一个php中的一个小错,不管来自于一个模块调用,或 第三方库,都可能导致线程挂掉,并传播到整个服务器线程导致web 服务器停止。这点从IIS的进程池监控可以看出来,在LInux上并不需要这个监管程序。为此,在windows上使用本地服务模块或插件,不管是 apache还是iis,都被证明是不具备大规模的应用价值,常常会不可预期的出现崩溃,即使使用ISAPI模式。