【问题标题】:Is threading in PHP efficient or not?PHP中的线程是否有效?
【发布时间】:2015-04-23 21:42:00
【问题描述】:

我正在为 Web 服务器编写一个 php 代码,在将结果返回给用户之前,它需要在请求时执行一些繁重的进程。 我的问题是:apache 服务器是否为每个客户端创建一个单独的线程/进程,还是应该使用多线程来分离它们? 流程包括通过cmd调用其他应用程序的执行以及下载文件到服务器。

【问题讨论】:

  • 听起来你需要一个作业/队列服务器而不是多线程(即使你使用多线程,你也会在 web 服务器用户的上下文中启动,这可能不是什么你要)。看看 Gearman、Resque 等Here's a comprehensive list

标签: php multithreading


【解决方案1】:

对网络服务器的每个请求都是一个单独的进程,它会尝试使用 CPU 中的空闲内核,如果当前没有空闲内核,它将继续排队等待。

【讨论】:

    【解决方案2】:

    您不能在单个 Web 请求中使用 apache 在 php 中进行多线程处理。你根本做不到。通常在每次请求时,apache 都会派生一个新的操作系统。过程。 这是可配置的,但通常在使用 php 时选择,因为 php 标准库的许多方法不是线程安全的。

    当我不得不处理繁重的计算时,我总是选择让用户请求异步,并让第三进程守护进程在后台进行实际计算。在这种情况下,在用户请求之后,我让客户端轮询守护进程(通过其他网络请求)以了解计算何时完成。

    【讨论】:

    • 如果我告诉你你可以在 PHP 中使用多线程,即使使用 Apache。那时会发生什么?你会先谷歌确认你可能是错的还是我们会争论?但是,您的另一半答案是正确的
    • 几年前我在需要它的时候用谷歌搜索过,今天我不会再这样做了,但我很高兴知道我可能错了
    • 所以我先道歉 - 我意识到我可能对最初的评论很粗鲁。使用 pthreads 扩展,PHP 开发人员能够线程化用户态 PHP 代码。我评论的原因是因为我经常在奇怪的参数语言 X 与 PHP 中绊倒,其中一个 cmets 通常是“缺乏线程”。这只是意味着我喜欢有潜在影响力的 SO 成员直截了当地了解事实,这样我们就不会传播过时的信息。然而,即使一个人可以在 PHP 中使用线程,但这并不意味着他们应该这样做——这就是为什么异步方法几乎总是更好的原因。
    • 感谢您的 cmets,我有最后一个问题:即使是由同一个客户端发送的,apache 是否会为每个 POST 请求派生一个新线程?我正在考虑将我的代码作为从单个或多个客户端接收此类请求的 Web 服务运行,但每个请求都需要一个新线程。如果有其他或更好的方法,请告诉我。
    • 回答是,是的:apache 在每次 POST 时都有 php 分叉。
    猜你喜欢
    • 2011-10-14
    • 1970-01-01
    • 1970-01-01
    • 2011-03-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-06
    • 1970-01-01
    相关资源
    最近更新 更多