很多站长朋友们都不太清楚超线程phpfpm,今天小编就来给大家整理超线程phpfpm,希望对各位有所帮助,具体内容如下:
本文目录一览: 1、 php5-cgi和php5-fpm 这两个东西是什么意思啊?有什么区别?怎么使用 2、 php-fpm的pm.max children数量和并发能力有直接联系吗 3、 linux服务器上运行PHP,除了PHP-FPM还有其他的方式吗 4、 紧急求助!关于CPU使用率100%的问题 5、 php处理请求是进城处理还是线程处理 6、 探讨nginx与php-fpm是不是以多进程多线程方式运行的 php5-cgi和php5-fpm 这两个东西是什么意思啊?有什么区别?怎么使用CGI
CGI全称是逗公共网关接口地(Common Gateway Interface),HTTP服务器与你的或其它机器上的程序进行逗交谈地的一种工具,其程序须运行在网络服务器上。
CGI可以用任何一种语言编写,只要这种语言具有标准输入、输出和环境变量。如php,perl,tcl等。
FastCGI
FastCGI像是一个常驻(long-live)型的CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去fork一次(这是CGI最为人诟病的fork-and-execute 模式)。它还支持分布式的运算,即 FastCGI 程序可以在网站服务器以外的主机上执行并且接受来自其它网站服务器来的请求。
FastCGI是语言无关的、可伸缩架构的CGI开放扩展,其主要行为是将CGI解释器进程保持在内存中并因此获得较高的性能。众所周知,CGI解释器的反复加载是CGI性能低下的主要原因,如果CGI解释器保持在内存中并接受FastCGI进程管理器调度,则可以提供良好的性能、伸缩性、Fail- Over特性等等。
FastCGI特点
FastCGI具有语言无关性.
FastCGI在进程中的应用程序,独立于核心web服务器运行,提供了一个比API更安全的环境。APIs把应用程序的代码与核心的web服务器链接在一起,这意味着在一个错误的API的应用程序可能会损坏其他应用程序或核心服务器。 恶意的API的应用程序代码甚至可以窃取另一个应用程序或核心服务器的密钥。
FastCGI技术目前支持语言有:C/C++、Java、Perl、Tcl、Python、SmallTalk、Ruby等。相关模块在Apache, ISS, Lighttpd等流行的服务器上也是可用的。
FastCGI的不依赖于任何Web服务器的内部架构,因此即使服务器技术的变化, FastCGI依然稳定不变。
FastCGI的工作原理
Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module)
FastCGI进程管理器自身初始化,启动多个CGI解释器进程(可见多个php-cgi)并等待来自Web Server的连接。
当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi。
FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在Web Server中)的下一个连接。 在CGI模式中,php-cgi在此便退出了。
在上述情况中,你可以想象CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
FastCGI的不足
因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
Nginx 0.8.46+PHP 5.2.14(FastCGI)服务器在3万并发连接下,开启的10个Nginx进程消耗150M内存(15M*10=150M),开启的64个php-cgi进程消耗1280M内存(20M*64=1280M),加上系统自身消耗的内存,总共消耗不到2GB内存。如果服务器内存较小,完全可以只开启25个php-cgi进程,这样php-cgi消耗的总内存数才500M。
上面的数据摘自Nginx 0.8.x + PHP 5.2.13(FastCGI)搭建胜过Apache十倍的Web服务器(第6版)
PHP-CGI
PHP-CGI是PHP自带的FastCGI管理器。
PHP-CGI的不足:
php-cgi变更php.ini配置后需重启php-cgi才能让新的php-ini生效,不可以平滑重启。
直接杀死php-cgi进程,php就不能运行了。(PHP-FPM和Spawn-FCGI就没有这个问题,守护进程会平滑从新生成新的子进程。)
PHP-FPM
PHP-FPM是一个PHP FastCGI管理器,是只用于PHP的,可以在 下载得到。
PHP-FPM其实是PHP源代码的一个补丁,旨在将FastCGI进程管理整合进PHP包中。必须将它patch到你的PHP源代码中,在编译安装PHP后才可以使用。
php-fpm的pm.max children数量和并发能力有直接联系吗pm.max_children 表示 php-fpm 能启动的子进程的最大数量。因为 php-fpm 是多进程单线程同步模式,即一个子进程同时最多处理一个请求,所以子进程数等于最大并发数。
linux服务器上运行PHP,除了PHP-FPM还有其他的方式吗运行模式
关于PHP目前比较常见的五大运行模式:
1)CGI(通用网关接口/ Common Gateway Interface)
2)FastCGI(常驻型CGI / Long-Live CGI)
3)CLI(命令行运行 / Command Line Interface)
4)Web模块模式(Apache等Web服务器运行的模式)
5)ISAPI(Internet Server Application Program Interface)
备注:在PHP5.3以后,PHP不再有ISAPI模式,安装后也不再有php5isapi.dll这个文件。要在IIS6上使用高版本PHP,必须安装FastCGI 扩展,然后使IIS6支持FastCGI。
1.1、CGI模式
CGI即通用网关接口(Common Gateway Interface),它是一段程序,通俗的讲CGI就象是一座桥,把网页和Web服务器中的执行程序连接起来,它把HTML接收的指令传递给服务器的执行程序,再把服务器执行程序的结果返还给HTML页。CGI 的跨平台性能极佳,几乎可以在任何操作系统上实现。CGI已经是比较老的模式了,这几年都很少用了。
每有一个用户请求,都会先要创建CGI的子进程,然后处理请求,处理完后结束这个子进程,这就是Fork-And-Execute模式。 当用户请求数量非常多时,会大量挤占系统的资源如内存,CPU时间等,造成效能低下。所以用CGI方式的服务器有多少连接请求就会有多少CGI子进程,子进程反复加载是CGI性能低下的主要原因。
如果不想把 PHP 嵌入到服务器端软件(如 Apache)作为一个模块安装的话,可以选择以 CGI 的模式安装。或者把 PHP 用于不同的 CGI 封装以便为代码创建安全的 chroot 和 setuid 环境。这样每个客户机请求一个PHP文件,Web服务器就调用php.exe(win下是php.exe,linux是php)去解释这个文件,然后再把解释的结果以网页的形式返回给客户机。 这种安装方式通常会把 PHP 的可执行文件安装到 web 服务器的 cgi-bin 目录。CERT 建议书 CA-96.11 建议不要把任何的解释器放到 cgi-bin 目录。 这种方式的好处是把Web Server和具体的程序处理独立开来,结构清晰,可控性强,同时缺点就是如果在高访问需求的情况下,CGI的进程Fork就会成为很大的服务器负担,想 象一下数百个并发请求导致服务器Fork出数百个进程就明白了。这也是为什么CGI一直背负性能低下,高资源消耗的恶名的原因。
1.2、FastCGI模式
FastCGI是CGI的升级版本,FastCGI像是一个常驻 (long-live)型的 CGI,它可以一直执行着,只要激活后,不会每次都要花费时间去 Fork 一次 (这是 CGI 最为人诟病的 fork-and-execute 模式)。
FastCGI是一个可伸缩地、高速地在HTTP server和动态脚本语言间通信的接口。多数流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同时,FastCGI也被许多脚本语言所支持,其中就有PHP。
FastCGI接口方式采用C/S结构,可以将HTTP服务器和脚本解析服务器分开,同时在脚本解析服务器上启动一个或者多个脚本解析守护进程。当HTTP服务器每次遇到动态程序时,可以将其直接交付给FastCGI进程来执行,然后将得到的结果返回给浏览器。这种方式可以让HTTP服务器专一地处理静态请求或者将动态脚本服务器的结果返回给客户端,这在很大程度上提高了整个应用系统的性能。
【原理】
1)Web Server启动时载入FastCGI进程管理器(IIS ISAPI或Apache Module);
2)FastCGI进程管理器自身初始化,启动多个CGI解释器进程 (可见多个php-cgi.exe或php-cig)并等待来自Web Server的连接;
3)当客户端请求到达Web Server时,FastCGI进程管理器选择并连接到一个CGI解释器。Web server将CGI环境变量和标准输入发送到FastCGI子进程php-cgi;
4)FastCGI子进程完成处理后将标准输出和错误信息从同一连接返回Web Server。当FastCGI子进程关闭连接时,请求便告处理完成。FastCGI子进程接着等待并处理来自FastCGI进程管理器(运行在 WebServer中)的下一个连接。在正常的CGI模式中,php-cgi.exe在此便退出了。
在CGI模式中,你可以想象 CGI通常有多慢。每一个Web请求PHP都必须重新解析php.ini、重新载入全部dll扩展并重初始化全部数据结构。使用FastCGI,所有这些都只在进程启动时发生一次。一个额外的好处是,持续数据库连接(Persistent database connection)可以工作。
备注:PHP的FastCGI进程管理器是PHP-FPM(PHP-FastCGI Process Manager)
【优点】
1)从稳定性上看,FastCGI是以独立的进程池来运行CGI,单独一个进程死掉,系统可以很轻易的丢弃,然后重新分配新的进程来运行逻辑;
2)从安全性上看,FastCGI支持分布式运算。FastCGI和宿主的Server完全独立,FastCGI怎么down也不会把Server搞垮;
3)从性能上看,FastCGI把动态逻辑的处理从Server中分离出来,大负荷的IO处理还是留给宿主Server,这样宿主Server可以一心一意作IO,对于一个普通的动态网页来说, 逻辑处理可能只有一小部分,大量的是图片等静态。
【缺点】
说完了好处,也来说说缺点。从我的实际使用来看,用FastCGI模式更适合生产环境的服务器。但对于开发用机器来说就不太合适。因为当使用 Zend Studio调试程序时,由于 FastCGI会认为 PHP进程超时,从而在页面返回 500错误。这一点让人非常恼火,所以我在开发机器上还是换回了 ISAPI模式。对某些服务器的新版本支持不好,对分布式负载均衡没要求的模块化安装是否是更好的选择。目前的FastCGI和Server沟通还不够智能,一个FastCGI进程如果执行时间过长会被当成是死进程杀掉重起,这样在处理长时间任务的时候很麻烦,这样做也使得FastCGI无法允许联机调试。因为是多进程,所以比CGI多线程消耗更多的服务器内存,PHP-CGI解释器每进程消耗7至25兆内存,将这个数字乘以50或100就是很大的内存数。
1.3 CLI模式
PHP-CLI是PHP Command Line Interface的简称,如同它名字的意思,就是PHP在命令行运行的接口,区别于在Web服务器上运行的PHP环境(PHP-CGI,ISAPI等)。 也就是说,PHP不单可以写前台网页,它还可以用来写后台的程序。 PHP的CLI Shell脚本适用于所有的PHP优势,使创建要么支持脚本或系统甚至与GUI应用程序的服务端,在Windows和Linux下都是支持PHP-CLI模式的。
【优点】
1)使用多进程,子进程结束以后,内核会负责回收资源;
2)使用多进程,子进程异常退出不会导致整个进程Thread退出,父进程还有机会重建流程;
3)一个常驻主进程,只负责任务分发,逻辑更清楚。
我们在Linux下经常使用"php –m"查找PHP安装了那些扩展就是PHP命令行运行模式;有兴趣的同学可以输入"php –h"去深入研究该运行模式。
1.4 模块模式
模块模式是以mod_php5模块的形式集成,此时mod_php5模块的作用是接收Apache传递过来的PHP文件请求,并处理这些请求,然后将处理后的结果返回给Apache。如果我们在Apache启动前在其配置文件中配置好了PHP模块
(mod_php5), PHP模块通过注册apache2的ap_hook_post_config挂钩,在Apache启动的时候启动此模块以接受PHP文件的请求。
除了这种启动时的加载方式,Apache的模块可以在运行的时候动态装载,这意味着对服务器可以进行功能扩展而不需要重新对源代码进行编译,甚至根本不需要停止服务器。我们所需要做的仅仅是给服务器发送信号HUP或者AP_SIG_GRACEFUL通知服务器重新载入模块。但是在动态加载之前,我们需要将模块编译成为动态链接库。此时的动态加载就是加载动态链接库。 Apache中对动态链接库的处理是通过模块mod_so来完成的,因此mod_so模块不能被动态加载,它只能被静态编译进Apache的核心。这意味着它是随着Apache一起启动的。
Apache是如何加载模块的呢?我们以前面提到的mod_php5模块为例。首先我们需要在Apache的配置文件httpd.conf中添加一行:
LoadModule php5_module modules/mod_php5.so
这里我们使用了LoadModule命令,该命令的第一个参数是模块的名称,名称可以在模块实现的源码中找到。第二个选项是该模块所处的路径。如果需要在服务器运行时加载模块,可以通过发送信号HUP或者AP_SIG_GRACEFUL给服务器,一旦接受到该信号,Apache将重新装载模块,而不需要重新启动服务器。
该运行模式是我们以前在windows环境下使用apache服务器经常使用的,而在模块化(DLL)中,PHP是与Web服务器一起启动并运行的。(它是apache在CGI的基础上进行的一种扩展,加快PHP的运行效率)。
1.5 ISAPI模式
ISAPI(Internet Server Application Program Interface)是微软提供的一套面向Internet服务的API接口,一个ISAPI的DLL,可以在被用户请求激活后长驻内存,等待用户的另一个请求,还可以在一个DLL里设置多个用户请求处理函数,此外,ISAPI的DLL应用程序和WWW服务器处于同一个进程中,效率要显著高于CGI。(由于微软的排他性,只能运行于windows环境)
PHP作为Apache模块,Apache服务器在系统启动后,预先生成多个进程副本驻留在内存中,一旦有请求出现,就立即使用这些空余的子进程进行处理,这样就不存在生成子进程造成的延迟了。这些服务器副本在处理完一次HTTP请求之后并不立即退出,而是停留在计算机中等待下次请求。对于客户浏览器的请求反应更快,性能较高。
紧急求助!关于CPU使用率100%的问题可能是:
1.间谍软件
21,你打开任务管理器后选择“进程”选项卡,然后点“CPU”,看是哪个进程占用了过多的CPU,如果不是System Idle Process,则结束那个进程,并且把那个进程的名字记录下来,然后找到其所在位置,在网上查这个以这个进程名为关键字搜索,看其他人是否也是这个因为这个进程而使CPU100%,或者那个进程就是病毒所为,然后再根据情况做出如何解决的办法(网上可能有人已经写好了)
为什么CPU占用率率总是这么高?经常会在论坛中看到有人问,为什么我的高配置电脑的运行速度却特别慢,当用任务管理器查看时,发现C P U 占用率经常接近1 0 0 %。确实,CPU 负载过高会导致电脑运行速度明显变慢,不过,如果C P U 占用率过高的情况只是偶尔出现, 并且很快恢复正常,那么不用担心。但是,如果这种情况持续较长时间,就得细细查查你的系统是否有问题了。
1.病毒和恶意程序搞的鬼这种故障常常是因为病毒、恶意程序、木马造成的,比如震荡波病毒等,所以在出现此问题后,应首先用已经更新了最新病毒库的杀毒软件全面扫描系统,接着再使用反间谍软件工具—Ad-Aware(下载地址:)清查是否存在间谍软件。相信不少朋友都遇到过SVCHOST.EXE文件占用100%CPU资源的问题,这往往是中病毒的表现,比如:冲击波变种病毒“W32.Welchia.Worm”,而SVCHOST.EXE 是Windows中的重要文件,是一些系统服务的宿主,提供条件让其他系统服务被启动。正因为它的重要性和特殊性,病毒、木马也想尽办法来利用它,企图利用它的特性来迷惑用户,达到感染、入侵、破坏的目的。所以,如果你发现任务管理器中某个SVCHOST 的CPU 占用率持续保持很高的状态,最好搜索一下SVCHOST.EXE 文件,看看是不是在除了“C:\Windows\system32”外,还在其他文件夹有它的影子。
小提示
SVCHOST的工作原理Windows 中的系统服务是以动态链接库(DLL)形式实现的,其中一些会把可执行程序指向SVCHOST,由SVCHOST调用相应服务的动态链接库并加上相应参数来启动服务。
2.轻松抓出狂占CPU 资源的软件如果没有发现病毒、间谍软件或木马程序,那么很可能就是某个软件的问题了,这时得分两种情况来排查。首先,如果CPU 占用率居高不下的情况从开机时就发生,并为什么CPU 占用率总是这么高?且直到关机都没有改善,就有可能是由某个随系统同时登录的软件造成的,在Windows XP 中请点击“开始→运行”,输入“M s c o n f i g ”并回车,打开“系统实用配置工具”,进入“启动”选项卡,接着依次取消可疑的选项前面的对勾,并重启测试问题是否发生,直到找到元凶。而Windows 2000 则可使用我们以前推荐的WinPatrol(下载地址:),进入“Startup Programs”选项卡,选中可疑项目后单击下面的“D i s a b l e ”按钮暂停其启动并进行测试。如果CPU 资源占用较大、电脑运行速度变慢的问题是间歇发生的,就要注意出现在什么情况下,比如:运行了某个软件、访问了某个网站等。在Windows 2000/XP中找出谁在大量占用CPU资源的方法也很简单,只要按下Ctrl+Alt+Del组合键(Windows 2000 为Ctrl + Shift + Esc 组合键)打开任务管理器,进入“ 进程” 选项卡, 注意“C P U ”行,这里显示的就是各个进程占用的CPU资源,你可以一个个细细查看,从中发现占用CPU 资源较高的程序,然后通过其文件名进行搜索并找到它属于哪个软件。然后就是对其卸载、升级或是干脆找个同类软件进行替代。
小提示
其中“System Idle Process”的CPU 占用数值会很高,没有关系,它的作用就是告诉你当前可用的CPU 资源是多少,因此它的值越高,越是好事。
楼主机内的KVXP.KXP 这个文件具体是什么我还没见过,不过我想知道的是你安装的江民软件是正版还是D版的?
3.CPU 占用率过高的经典案例
案例1:网络连接导致CPU 占用率过高当你的Windows 2000/XP 作为服务器时,收到来自端口445 上的连接请求后,系统将分配内存和少量地调配CPU资源来为这些连接提供服务。当负荷过重,CPU 占用率可能过高。要解决这个问题可通过修改注册表,打开注册表编辑器,找到[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\ S e r v i c e s \ l a n m a n s e r v e r ] ,在右侧窗格中新建名为“maxworkitems”的DWORD 值。然后双击该值,如果你的电脑有512MB 以上内存,请设置值为“1024”,如果小于512MB,则设置值为“256”。
案例2:右击文件导致100% 的CPU 占用有些朋友报告,如果电脑是Pentium Ⅲ或Pentium 4 的CPU,在Windows XP 中,如果不用左键先选中文件而是直接右击它,就会导致CPU 占用率100%,微软提供的解决方法是先左键选中文件,然后再右击。而非官方的方法为右击桌面并选择“属性”,接着进入“外观”选项卡,单击“效果”按钮,接着在打开的窗口中取消“为菜单和工具提示使用下列过渡效果”的勾选即可。
案例3 :不完善的驱动程序
有时某些不完善的驱动程序也可能导致CPU 资源占用过高,特别是显卡驱动,因此建议你最好选择微软认证的或由官方发布的正式版,而且对版本要求要了解,并不是版本越高越好。
案例4:杀毒软件造成的CPU 占用率过高
目前的杀毒软件基本都加入了对网页、插件、邮件的即时监控,这样无疑增大了系统负担,比如:有时在玩游戏时,会非常缓慢,IE 打开网页速度也不正常,在排除了其他因素后,你可以怀疑一下所安装的杀毒软件,试着停用它看看问题是不是还存在。
案例5:CPU 降温软件
有些朋友在安装了CPU 降温软件(比如:CpuIdle)后发现,CPU 占用率总是在100%,这是因为这些软件在运行时会利用所有CPU 空闲时间来进行降温,但Windows 不能分辨普通的CPU 占用和降温软件的降温指令之间的区别,因此便造成了CPU 占用率始终显示为100% 的情况,你不必为此而担心,它并不会影响到你的正常操作。
案例6:超线程导致CPU 占用过高和上网死机
有些的爱机,遇到了类似的故障,一旦用IE 上网,短时间就会出现死机现象,并且IE 的CPU 占用率达到100%,而他们电脑配置的共同点就是使用了具有超线程功能的Pentium 4 CPU。经过了解,目前还没有明确的原因分析,但有一些网友们总结的经验:首先,如果你安装了天网防火墙,请将其卸载并安装其他防火墙软件试试(据网友报告,超线程似乎与防火墙软件有冲突);如果不行,可以尝试在BIOS 中禁用超线程。
案例7 :待机造成系统自动关闭硬盘DMA 模式
如果你经常使用Windows 2000/XP/2003 的待机功能,那么很可能会发现系统性能突然大幅下降,不仅启动速度变慢,而且在运行一些大的软件或游戏时CPU 占用率时常达到100%,并产生停顿。这时可以按下Win + Break 组合键打开系统属性窗口,进入“硬件→设备管理器”,接着双击“IDE ATA/ATAPI 控制器”项下连接硬盘的“主要IDE 通道”( 或“ 次要I D E 通道”), 然后进入“ 高级设置”选项卡,查看“当前传送模式”,如果是“U l t r a D M AMode *”(* 为数字,DMA33 为2,DMA66 为4,DMA100为5 、DMA133 为6),那么系统正常,但如果以前设的是“Ultra DMA Mode 6”又没有改动,而现在是“Ultra DMA
Mode 4”或“Ultra DMA Mode 2”,或者是“PIO 模式”,而且改不过来!这很可能就是系统自动关闭了DMA模式。
这个问题产生的原因是,Windows 2000/XP/2003 的IDE/ATAPI 端口驱动程序(Atapi.sys)累积收到总共6 个超时(超时值为4 秒)或循环冗余检验(CRC)错误后,驱动程序将把传送模式从最快的DMA 模式分步骤降为较慢的DMA 模式,如果继续收到超时或CRC 错误,则最终会将传送模式降为最慢的P I O 模式。使用待机功能后进行恢复时,很容易造成超时或CRC 错误,因此在你多次使用待机功能后,硬盘的传送模式便会慢慢下降。
解决方法为:双击打开设备管理器连接硬盘的“主要I D E 通道”(或“次要I D E 通道”)的属性窗口,在“驱动程序”选项卡中单击“卸载”按钮,完成后重启电脑,系统将自动重新安装驱动程序并恢复默认值。
接着打开注册表编辑器, 分别找到
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0001]和[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Class\{4D36E96A-E325-11CE-BFC1-08002BE10318}\0002],在右侧窗格中分别创建名为“ResetErrorCountersOnSuccess”的DWORD 值,并将其值设置为1 。
小提示
上面注册表最后的项“{4D36E96A-E325-11CE-BFC1-08002BE10318}”列出的带有“0001”编号的子项对应于一台仅有一个IDE 控制器的电脑的“主要IDE 通道”和“次要IDE 通道”,如果你的电脑有两个IDE 控制器,则对于每个控制器,“主要IDE 通道”和“次要IDE 通道”的带有编号的子项分别是“0001、0002、0003、0004、0005、0006⋯⋯”。为检查是否找到了正确的子项,请检查子项的“DriverDesc”值是包含字符串值“主要IDE 通道”,还是包含字符串值“次要IDE 通道”。
以上修改方法的最终结果是,将超时值延长为1 0 秒,并且连续发生6 次超时错误或CRC 错误后才降低传送模式。
根据这些,你对照你的爱机检查一下吧,也许会得到解决的。
php处理请求是进城处理还是线程处理进程是操作系统分配资源和调度的功能单元,一个进程里面有一个或者多个线程,线程是操作系统的一个独立运算单元。通常可以认为一个软件对应一个进程,并行是指多个软件一起运行,实际上分时复用而已,并发是指某个软件在运行的时候把计算分给多个CPU同时进行计算,是真正的同一时间内一起发生的事情。
PHP-fpm使用的就是多进程模型。
HHVM它选择的是多线程模型。
对于某个服务而言,譬如web服务,主要考虑它的并发能力,就是单位时间内能处理的请求数量。而并行计算就是为了提高并发能力的。脱离nginx或者apache来说,php的并行处理能力,既可以用多进程的模型来提高,也可以用多线程的模型来提高。最简单的情况下,php提供单进程单线程的方式来提供服务,每次之处理一个请求,如果请求的处理速度足够快,一秒时间内并发能力也可以算是强的,但是这样比较浪费资源,所以往往会根据CPU、内存、网络的情况来设置多进程、多线程或者多服务器来提高并发能力。
探讨nginx与php-fpm是不是以多进程多线程方式运行的这个问题比较初级,官方文档上的资料都是很全的。
Nginx 是非阻塞IO IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。
Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。
PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests 指定的是每个进程处理多少个请求后重启(因为 PHP 偶尔会有内存泄漏,所以需要重启).
PHP-FPM 的每个进程也只有一个线程,但是一个进程同时只能服务一个客户端。
大多数的 Linux 程序都倾向于使用进程而不是线程,因为 Linux 下相对来说创建进程的开销比较小,而 Linux 的线程功能又不是很强大。
你可以去后盾人平台看看,里面的东西不错
关于超线程phpfpm的介绍到此就结束了,不知道本篇文章是否对您有帮助呢?如果你还想了解更多此类信息,记得收藏关注本站,我们会不定期更新哦。
查看更多关于超线程phpfpm 超线程和多核的区别的详细内容...