php并发进程数,php-fpm 进程数 20,那么就意味着 20 个请求可以同时处理吗?

314bc6e4933714c60ba2a81fe033b03d.png

叮当猫咪

PHP-FPM 是 1:1 模型。单机情况下,如果 PHP-FPM 配置的最大子进程数为 20,那么就最多可以并发处理 20 个请求。

原因

PHP-FPM 采用 master/worker 多进程架构。即:众多的 worker 进程组成了进程池,等待 master 进程分配任务,而且每个 worker 进程只能同时处理单个任务,前一个处理结束,才能为下一个服务。

FPM 配置

参考:FPM 配置按对子进程的管理类型,可通过不同的配置调整 worker 进程数:

static - 子进程的数量是固定的(pm.max_children)

ondemand - 进程在有需求时才产生(当请求时,与 dynamic 相反,pm.start_servers 在服务启动时即启动

dynamic - 子进程的数量在下面配置的基础上动态设置:pm.max_children,pm.start_servers,pm.min_spare_servers,pm.max_spare_servers

相关的 Zend 源码

版本:PHP-5.6文件位置:vim sapi/fpm/fpm/fpm.c +93从 fpm_run 方法中,也可以看出只给每个空闲的子进程分配一个请求任务。

/* children: return listening socket

parent: never return */

int fpm_run(int *max_requests) /* {{{ */

{

struct fpm_worker_pool_s *wp;

/* create initial children in all pools */

for (wp = fpm_worker_all_pools; wp; wp = wp->next) {

int is_parent;

is_parent = fpm_children_create_initial(wp);

if (!is_parent) {

goto run_child;

}

/* handle error */

if (is_parent == 2) {

fpm_pctl(FPM_PCTL_STATE_TERMINATING, FPM_PCTL_ACTION_SET);

fpm_event_loop(1);

}

}

/* run event loop forever */

fpm_event_loop(0);

run_child: /* only workers reach this point */

fpm_cleanups_run(FPM_CLEANUP_CHILD);

*max_requests = fpm_globals.max_requests;

return fpm_globals.listening_socket;

}

/* }}} */

参考:PHP-FPM运行原理

替代方案

FPM 只是 PHP 官方实现的 fast-cgi 进程管理器。对应的也有一些替代的方案,比如:采用异步非阻塞多进程模型的 swoole-http-server参考:swoole-http-server

其他

当然,在现实使用场景中,要根据实际需求来做技术选型。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值