php - PHP 中如何处理并发请求(使用线程、线程池或子进程)

标签 php concurrency threadpool child-process

我了解 PHP 支持处理多个并发连接,并且可以根据服务器配置,如 answer 中所述。

服务器如何管理多个连接它是为每个请求派生一个子进程还是使用线程处理还是使用线程池处理?

linked answer说一个进程是 fork 的,然后评论中的作者说线程或进程,如果使用子进程、线程或线程池服务请求,这会让人感到困惑?

最佳答案

据我所知,每个网络服务器都有自己的处理多堆同时请求的方式。 通常 Apache2 应该为每个新请求派生一个子进程。但是您可以按照链接的 StackOverflow 答案中提到的以某种方式配置此行为。

例如,Nginx 在一个线程中获取每个请求(像 Node.js 一样异步处理新连接)或者有时使用缓存(根据配置;Nginx 也可以用作负载平衡器或 HTTP 代理)。这是为您的应用程序选择合适的网络服务器的事情。

Apache2 可能是一个非常好的网络服务器,但是当你想在生产中使用它时,你需要更多的负载平衡。但它在具有多个持续时间短的连接或什至根本不更改(或使用缓存)的文档时也具有强大的功能。

Nginx 是非常好的,如果你希望有许多处理时间较长的持久连接。那时您不需要那么多负载平衡。

我希望,我能够帮助你解决这个问题;)

来源:

https://httpd.apache.org/docs/2.4/mod/worker.html

https://anturis.com/blog/nginx-vs-apache/

我建议您也看看:What is thread safe or non-thread safe in PHP?

关于php - PHP 中如何处理并发请求(使用线程、线程池或子进程),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33624684/

相关文章:

Java 的 Fork/Join vs ExecutorService - 什么时候使用?

java - JAVA通过并发在静态方法中实现唯一ID号

javascript - 这个javascript中有竞争条件吗?

python - 多处理池 'apply_async' 似乎只调用一次函数

php - 为什么我在对象上调用函数时会在非对象上出现此函数调用错误?

php - 我没有收到Mysql错误,但查询无法正常工作

java - 在 PHP 中实现此 Java 密码加密算法

android - 如何将 AsyncTask 与 ThreadPoolExecutor 一起使用

c# 多线程应用程序中的 TCP 耗尽

php - 如何在 laravel 5.4 中获取最后插入的 id