php单线程和多线程的区别,PHP 是单进程单线程的疑问和高并发的问题

LNMP 架构下 PHP 采用 FPM 模式运行(php-fpm worker 进程采用单线程模式运行,同步阻塞,即一个worker 只会处理一个请求,处理完了一个才会处理下一个)

而 LAMP 架构下,PHP 是作为 apache mod 运行的,印象中 apache 采用 fork 模式运行(记不太清楚了)即请求来了之后 fork 一个子进程处理该请求,处理完之后,回收该子进程

对于高并发这个问题:

首先得问清楚是多大并发:

C10K,C100K,C10M,C100M?

其次得问清楚是服务器得配置:

服务器的物理资源(网络,内存,核数)决定它上限,且取决于最低的一项(比如带宽10m,而每个客户端占用 200k,那么最高约等于 10m/200k),而单机的物理资源不可能无限扩展,所以单机能处理的并发是有上限的

明确了这两点前提之后才能回答这个高并发得问题,对于不同的软件架构,系统的瓶颈不同:

假定单机 C10k 并发,架构是 LNMP

瓶颈可能是数据库,php-fpm,一般不可能是 nginx 和 操作系统,如果是数据库瓶颈又得考虑应用场景是(读多写少还是写多读少,是否要求强一致性等?)如果是 php-fpm 可以多启动几个 worker 进程或者动态启动 worker 进程(一般是 CPU 核心得倍数(又要考虑是逻辑核心还是超线程))

C10M 并发及以上

这种场景不是 PHP 能胜任得,一般采取分布式架构。这个太深入了,我就不班门弄斧了。

总之高并发问题从来不是一个单独的点,得从全局出发。一般面试问这种问题得面试官我觉得要么是半壶水,要么就是敷衍你(以我在成都面试个多个 PHP 岗位接触的面试官来说,问这个问题多数是冲冲场面,你给他讲这些基本没啥用)建议看面试官水平采用不同的回答,一般就采用网上回答:负载均衡,静态化,缓存。。。

对于超卖这个问题:这是一个业务上的问题,一般采用队列(排队处理)或者锁机制来处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值