php是单线程还是多线程

PHP是单线程的,但是在多个请求下看起来就像是多线程。
Apache、Nginx 或 PHP-FPM 在单独的进程中处理。
进程批处理会导致多个请求并行出现。
请注意资源争用,例如数据库写入。
Swole 协程提高了 I/O 效率。
单线程核心不变,高并发需要防止争用。

php在web上运行是多进程还是单进程

PHP是单进程、单线程的,Nginx负责多个并发进程。

2 01 5 年,PHP-FPM似乎通过多个进程处理请求。

2 01 8 年,Swoole推出了协程来解决高并发。

不要相信原生 PHP 处理高并发的废话。
使用 Swoole 或 PHP-FPM。

如何处理PHP的多线程和并发?

哎哟,伙计,我基本上已经经历过你所说的所有陷阱了。
不过废话不多说,我来说说我当年是怎么做的吧。

假设有一年,大约在 2 01 4 年或 2 01 5 年,我找到了一份工作。
那是一个电商平台,流量吓人。
我才真正了解到PHP单线程的陷阱。
服务器一启动就崩溃了,CPU 1 00%满。
客户很着急。

我当时想了想,想了一些办法。

第一个技巧是多进程。
我使用 pcntl_fork() 创建了几个子进程。
当时我就想到了使用多核CPU。
效果确实有,但麻烦也来了。
例如,如果一个进程更改了某些共享数据,则必须实现另一种同步机制。
我记得我为此花了几个晚上的时间,调试起来非常困难。
而且,在了解进程间通信、信号量等之前,数据都被搞乱了好几次。
那一幕现在想起来都让人头疼。

第二步是协程。
后来接触Swoole才知道这个东西是什么。
也许当时Swoole还不够流行,但我还是尝试了一下。
事实上,在单线程中使用协作调度感觉内存占用要小得多。
我在一个小网站上尝试了一下,同时发帖数立马就上去了。
不过,我胆小,不敢乱说。
协程看起来比多进程更复杂,新手可能要学一段时间。

第三个技巧是后台任务队列。
这招确实管用。
例如,我会将订单处理和发送电子邮件等耗时的任务留在后端。
使用 RabbitMQ 创建生产者和消费者。
前台请求很快得到回复,不会出现卡顿。
记得晚上有活动,交通高峰。
如果没有这个队列,服务器就会挂掉。
这是我最常用的技巧之一。

第四个技巧是缓存。
Memcached、Redis,我都用过。
频繁访问的数据,例如产品列表、用户信息等,直接放置在缓存中。
效果立竿见影。
我有一个项目。
更改缓存后,查询速度至少快一半。
省下来的服务员钱足够我喝很多杯奶茶了。

第五个技巧是代码和数据库优化。
这是最基本的,但确实不能省略。
当时有一个函数是无限循环。
我根本没有注意到,如果客户访问过多,CPU就会暴涨。
后来我改了一下就OK了。
SQL 也是如此。
索引没有用好,查询慢如蜗牛。
我还强迫团队使用准备好的语句。

总的来说,PHP 中的并发并不是一件容易的事。
你必须组合多个进程、协程、队列和缓存,并且必须优化代码和 SQL。
在高并发场景下,像Swoole这样的扩展确实很酷。
不过,我也不敢乱说。
每招都有其陷阱,必须根据实际情况而定。
如果你问了这么多问题,那么你可能遇到了问题。
仔细考虑一下哪一个更适合您。
如果您确实不确定,请搜索更多信息或与某人交谈。
不要像我当年那样,一头扎进去调试,直到你秃头。