【问题标题】:Running php pthreads运行 php pthreads
【发布时间】:2017-08-31 09:02:57
【问题描述】:

我在 ubuntu linux 上安装了一个 php,它工作得很好,但我现在需要使用 pool 类。

我在 80 端口上运行了普通的 php 和 apache 设置。我想使用 pool 类来创建 100 个 worker 来处理许多多行 mysql 数据。

我应该使用像php -f file.php 这样的cli 运行基于池类的程序还是应该使用什么方法。

普通的 php 在 80 端口向最终用户提供内容与在 php cli 上的服务内容不同吗?

如果我从 cli 运行池程序,运行基于池类的程序会占用普通的 php 资源吗?

在需求中

pthreads 需要使用 ZTS(Zend 线程安全)构建 PHP 启用(在 Windows 上 --enable-maintainer-zts 或 --enable-zts )

【问题讨论】:

  • 您需要重新编译您的 PHP 安装才能使用 ZTS。作为替代方案,您可以使用普通的 PHP CLI 进程,然后使用 ZMQ 在进程之间进行消息传递。
  • 假设我并排安装了普通 php 和 php cli,碰巧一个 cli 程序使用的资源比它应该使用的多,这会影响我用于服务器的普通 php 安装网页?。
  • 当然可以。但是 pthreads 也会这样做。 CPU 周期、RAM、HDD 带宽和其他 I/O 不能凭空而来。也许您应该将其卸载到另一台服务器,然后像 ZMQ 这样的消息传递解决方案是您的最佳选择。
  • 是的,这是个好主意。我会将 pthread 卸载到另一台服务器上。
  • 你不需要 pthreads (不需要重新编译 PHP)。您可以使用 supervisord 管理正常的 CLI 进程,或者只从 /etc/rc.local 启动它们(不推荐)。

标签: php pthreads


【解决方案1】:

依赖官方的PHP pthreads页面:

警告 pthreads 扩展不能在 Web 服务器环境中使用。因此,PHP 中的线程应该只保留给基于 CLI 的应用程序。

所以,通过 CLI 使用 pthread 脚本是个好主意(这是唯一合理的方法)。 另见this

我无法理解“普通 php 在端口 80 上向最终用户提供内容与在 php cli 上提供的内容是否不同”到底是什么意思? - 在端口 80 上,您的 apache 服务器运行脚本并通过 HTTP/S 将输出提供给最终用户。在 CLI 中,默认 STDOUT 的输出可以相同,但只有您喜欢最终用户。

拥有 100 名工作人员的池将“吃掉”大量系统资源。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多