㈠ 探讨nginx与php-fpm是不是以多进程多线程方式运行的
这个问题比较初级,官方文档上的资料都是很全的。
Nginx 是非阻塞IO & IO复用模型,通过操作系统提供的类似 epoll 的功能,可以在一个线程里处理多个客户端的请求。
Nginx 的进程就是线程,即每个进程里只有一个线程,但这一个线程可以服务多个客户端。
PHP-FPM 是阻塞的单线程模型,pm.max_children 指定的是最大的进程数量,pm.max_requests 指定的是每个进程处理多少个请求后重启(因为 PHP 偶尔会有内存泄漏,所以需要重启).
PHP-FPM 的每个进程也只有一个线程,但是一个进程同时只能服务一个客户端。
大多数的 Linux 程序都倾向于使用进程而不是线程,因为 Linux 下相对来说创建进程的开销比较小,而 Linux 的线程功能又不是很强大。
你可以去后盾人平台看看,里面的东西不错
㈡ php在web上运行是多进程还是单进程
php在web上运行是单进程的,具体原因如下:
1、PHP是一个单线程的脚本开发语言,它常在Web开发及系统集成中出现。
PHP是单进程单线程的,当处理复杂的业务的时候我们会发现他串行执行命令的时候CPU、磁盘、内存等利用的都很低有很多时候都是在排队等待,有的时候我们想并发的让他去执行一批任务然后一起拿解决结果是一件很痛苦的事情(自己用pthread或者其他方式才能解决,但是这很痛苦)开发语言一直在升级变化适应需要。另外,可以考虑通讯使用Swoole。
2、解决方案如下:
分前后端,前端可以通过消息中间件,同步、异步 调用一个或多个接口。但是socket的扩展确确实实不咋好用。不是普通小企业能做的出来的。
㈢ php真的有多进程,多线程吗
通常意义上所说的多进程是由apache调度的,比如html页面同时发送5个ajax请求的时候,那么5个php进程会几乎同时进行。
PHP本身是不存在多线程的,总是单线程的方式执行。
误区就是PHP可以通过特别的手段用多进程的方式来模拟多线程,不过几乎用不到。因为PHP不像java之类的本身有进程管理机制,因此模拟的多线程非常不好控制,同时效率也并不高。
㈣ PHP 到底是单进程还是多进程
默认是单进程,可以支持多进程
㈤ PHP在什么情况下会使用多进程
严格来说 PHP 的多线程指的应该是 pecl 中的 pthreads. 这个东西很少有人会用到,我也不建议大家用,因为通常情况需要用到 pthreads 的时候通常是这个工作不适合 PHP 来做。
如果说 PHP 和多线程有什么关系,那就是 PHP 不同于其他的一些后端语言,通常 PHP 的运行环境是由 PHP-FPM
管理的若干个独立的 PHP 进程组成的。因此 PHP 天然地可以非常方便地横向扩充:增加 PHP-FPM 的进程数,甚至把 PHP-FPM
分散在两台服务器上。
㈥ PHP多进程同时追加写入TXT,导致之前的内容丢失。
多进程同时修改一个文件是很容易造成这样的情况,建议使用数据库来存储,编程就非常简单,锁可以细到记录级。
如果必须使用文件,一般的办法是读文件前判断是否存在临时文件,存在就放弃(或者等待),只有不存在临时文件才继续操作,继续操作的第一步是建立临时文件,修改文件,最后删除临时文件。
㈦ php多进程编程时如何共享变量
<?php /**
* File name:client.php
* 客户端代码
*
* @author guisu.huang
* @since 2012-04-11
*/ set_time_limit(0);
$host = "127.0.0.1";
$port = 2046;
$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP)or die("Could not create socket\n"); // 创建一个Socket
$connection = socket_connect($socket, $host, $port) or die("Could not connet server\n"); // 连接 socket_write($socket, "hello socket") or die("Write failed\n"); // 数据传送 向服务器发送消息 while ($buff = socket_read($socket, 1024, PHP_NORMAL_READ)) {
echo("Response was:" . $buff . "\n");
}
socket_close($socket);
㈧ 求助,php使用Pthread进行多进程的问题
curl_init()不开新进程,但客户机的file descriptor是有限的,内存也是有限的,意味着能new的Thread不是无限的。
你要达到pthread要达到的目的,不妨看看http://php.net/manual/en/function.curl-multi-init.php,它允许你异步的处理多个curl_init()返回。
㈨ 有办法在windows下实现PHP的多进程编程吗
你先想清楚是否真的需要fork, signal, priority等pcntl的特性,如果其实你只是想要另外新开一个进程,也可以通过cli下面用exec执行额外的php进程来一定程度上模拟多进程
如果你确实需要fork等特性:
cygwin是Windows上的POSIX环境,你可以在上边试试编译php以及pcntl的扩展(不知道是否能走通)
上虚拟机吧
㈩ php的多进程是不是可以无限制的fork子进程
对于php了解的不多,但是php作为一种开源脚本语言,其中有C、Java、Perl编程语言的特点。
就C而言,无限制的fork子进程显然是不可能的。进程是并发程序在执行过程中分配和管理资源的基本单位,是一个动态的概念。如果为每一个请求都创建一个进程的话,系统的开销会很大,而且用户请求效率非常低。
另一方面,进程之间是独立的地址空间,并且进程之间的资源都是独立的,这不像同一进程内的线程共享本进程的资源。所以说在有限的存储空间中无限制的fork子进程显然是很难实现的。
个人见解,如有误或者您有更好的见解,敬请指教!