apache/mod_php中的并发执行?

apache/mod_php中的并发执行?,php,multithreading,apache,concurrency,Php,Multithreading,Apache,Concurrency,我目前正在开发一个具有非常特殊功能的MVC webframework。 XML文件中定义的布局被划分为可单独排列/缓存/加载的内容块 每个内容块(例如,在多个页面上重复使用的页脚)都有自己的某种控制器。我称之为区块控制器 该控制器执行相关代码(包括通过资源模型的DB请求、通过HTTPclient模型的外部API请求等) 该框架设计用于涉及多个数据源的非常复杂的环境中。这将特别是几个数据库服务器和RESTAPI 现在的目标是并发执行这些内容块以加速页面交付 例如: 一个网络界面需要从谷歌邮件、Fa

我目前正在开发一个具有非常特殊功能的MVC webframework。 XML文件中定义的布局被划分为可单独排列/缓存/加载的内容块

每个内容块(例如,在多个页面上重复使用的页脚)都有自己的某种控制器。我称之为区块控制器

该控制器执行相关代码(包括通过资源模型的DB请求、通过HTTPclient模型的外部API请求等)

该框架设计用于涉及多个数据源的非常复杂的环境中。这将特别是几个数据库服务器和RESTAPI

现在的目标是并发执行这些内容块以加速页面交付

例如:

一个网络界面需要从谷歌邮件、Facebook、Twitter和其他10个来源获取你的地址簿,进行一些匹配和计算。 每个请求大约需要1秒。 如果按顺序执行,则总计15秒

我们的目标是为所有内容定义一个块(是的,这应该放在模型中,但我希望将它保持在块级别,因为大多数逻辑都是在这个xml文件中定义的。它们只是不生成输出。)并将“并发执行”标志设置为1

最后一个内容块,它将所有这些并发块作为所需属性进行组合,因此当它们全部完成并且数据可用时,它开始执行。大概是这样的:

<block template="blank.phtml" block="twitter.php" concurrent="1" name="twitter"/>
<block template="blank.phtml" block="gmail.php" concurrent="1" name="gmail"/>
<block template="blank.phtml" block="facebook.php" concurrent="1" name="facebook"/>
<block template="stats.phtml" block="statistics.php">
    <depends>twitter</depends>
    <depends>gmail</depends>
    <depends>facebook</depends>
</block>

啁啾
gmail
脸谱网
解析器基本上首先查看布局xml文件,扫描标记为并发执行的块,并用队列组装数组,每个队列点可以有多个条目。它们按依赖顺序排列

因此,如果某个对象没有依赖关系,它肯定会在第一个位置进入队列组。所有依赖于这群人的东西都会进入第二个正电子,等等

数据存储到单例模型中

我现在的问题是,它可以与mod_cgi或mod_fastcgi for php配合使用,但它只是把apaches mod_php搞得一团糟

我在谷歌上搜索了一下,读到你不应该在mod_php中使用pcntl_fork。。。
还有别的选择吗

使用proc_open在命令行上将每个块作为不同的脚本运行,而不是分叉。这不可能在所有的web主机上都实现,但您是否有自己的服务器


您不能插入mod_php,因为这将创建一个完全不同的Apache进程。在mod_php中执行并发工作确实很困难,但使用proc_open是可行的(正如我所说)。

IIRC,Facebook在前端的页面上做了类似的事情-每个
块都是由不同的进程生成的,然后通过AJAX请求。它确实回避了这个问题,但似乎扩展得很好。没错,大多数网站通过增量ajax页面加载绕过了这个问题,但在这种情况下,这不是一个选项,因为数据是服务器端需要的……是的,看起来是对的。我考虑过类似于使用shell_exec或system()运行脚本的方法