![]() |
1
9
如果您的目标是最短的时间,那么解决方案描述起来很简单,但实现起来却不那么简单。 你需要找到一个划分工作的模式(你在这方面没有提供太多的信息)。
然后使用一个主进程
forks
孩子们去做这项工作。通常,您使用的进程总数应介于
假设这些数据将存储在文件中,您可以考虑使用非阻塞IO来最大化吞吐量。不这样做将使您的大部分进程花费时间等待磁盘。PHP有
如果你决定不使用
关于
|
![]() |
2
11
从您的PHP脚本,您可以启动另一个脚本(使用
注意:为了避免PHP等待
替代地 ,可以使用 PCNTL 功能。这将使用一个PHP脚本,当分叉时,该脚本可以检测它是父脚本还是子脚本,并进行相应的操作。有一些函数可以发送/接收信号,以便在父/子文件之间进行通信,或者您将子日志记录到一个文件,并从该文件读取父日志。 从 pcntl_fork 手册页:
|
![]() |
3
4
这可能是考虑使用 message queue 即使你在一台机器上运行它。 |
![]() |
4
3
您可以使用更有效的数据结构,如btree。我在Java中使用过一次,但不在PHP中使用。您可以尝试此脚本: http://www.phpclasses.org/browse/file/708.html ,它是btree的一个实现。 如果还不够,可以使用Hadoop来实现map/reduce模式,如Michael所说。我不支持PHP进程,它似乎对性能没有帮助。 就个人而言,我将使用PHP作为客户机,并将所有内容放入Hadoop中。本教程可能有助于: http://www.lunchpauze.com/2007/10/writing-hadoop-mapreduce-program-in-php.html . 另一个解决方案可以是使用Btree的Java实现: http://jdbm.sourceforge.net/ . JDBM是一个使用btree+数据结构的对象数据库。然后,您可以使用PHP进行搜索,方法是使用Web服务公开数据,或者直接使用Quercus访问数据。 |
![]() |
5
2
这个问题似乎有点困惑。
你是说经过的时间?当然,使用正确的数据结构将提高吞吐量,但是对于给定的数据结构,算法的最小阶数是绝对的,与如何实现算法无关。
设计模式是编码 是 不是用于编写程序的模板,而是用于课程设计的有用工具。从一个模式开始并使代码适合它本身就是一个反模式。 没有人能够回答这个问题而不知道更多关于您的数据及其结构的信息,但是提高效率的关键驱动因素将是您用于实现树的数据结构。如果经过的时间很重要,那么一定要考虑并行执行,但是也有必要考虑在不同的工具中执行操作-数据库对于处理大型数据集是高度优化的,但是请注意,在关系数据库中描述树的明显方法在涉及到隔离子树和行走树。 为了回应亚当的建议,你回答说:
你在哪里听到的?当然,从CGI或mod_php调用的脚本中分叉是一个坏主意,但是从命令行中这样做并没有错。确实有一个长期运行的PHP进程的谷歌(请注意,有很多坏信息)。您所编写的代码将根据底层操作系统的不同而有所不同—您没有说明这些操作系统。 我怀疑,通过确定需要检查树的哪些部分,并且只检查这些部分,并在更新树时触发检查,或者至少将节点标记为“脏的”,可以解决大部分性能问题。 您可能会发现这些有用: http://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/ http://en.wikipedia.org/wiki/Threaded_binary_tree C. |
![]() |
6
2
|
![]() |
7
0
线程有一个相当新的(自2012年以来)PHP扩展可用: pthreads . 它可以通过安装 PECL .
PHP代码中的简单实现:扩展自
输出
|
![]() |
Coding Dog · Python异步函数不工作。继续跑 1 年前 |
![]() |
cyka · 强制JavaScript等待单击(循环) 2 年前 |
![]() |
CodeMonkey · 无法访问React[重复]中的对象值 2 年前 |
![]() |
Tim · 为异步方法返回列表的最佳方式是什么? 2 年前 |
![]() |
dapidmini · 未捕获的承诺嵌套异步函数承诺错误处理 2 年前 |