Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/273.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP程序体系结构设计_Php_Multithreading_Architecture - Fatal编程技术网

PHP程序体系结构设计

PHP程序体系结构设计,php,multithreading,architecture,Php,Multithreading,Architecture,我有一个web应用程序,用户可以在其中上载文本文件。应用程序读取文本文件,并根据文件数据执行30个不同的任务,并在几秒钟后向用户显示输出 我的方法是编写一个php程序,它将获取文本文件,然后调用不同的脚本(php和unix脚本)来执行30个不同的任务 我有两个问题: 我可以并行运行30个不同的脚本以节省总体执行时间吗?如果是,那么我应该在php中使用pthread库来实现多线程吗?我在一篇文章中读到,多线程在web应用程序中无助于节省执行时间。这篇文章说,虽然所有线程都将并行运行,但它将花费相同

我有一个web应用程序,用户可以在其中上载文本文件。应用程序读取文本文件,并根据文件数据执行30个不同的任务,并在几秒钟后向用户显示输出

我的方法是编写一个php程序,它将获取文本文件,然后调用不同的脚本(php和unix脚本)来执行30个不同的任务

我有两个问题:

  • 我可以并行运行30个不同的脚本以节省总体执行时间吗?如果是,那么我应该在php中使用pthread库来实现多线程吗?我在一篇文章中读到,多线程在web应用程序中无助于节省执行时间。这篇文章说,虽然所有线程都将并行运行,但它将花费相同的时间,就像它们按顺序运行一样

  • 我怎么知道所有的线程是否都结束了?如果我继续检查所有线程的执行情况,会不会增加系统资源的开销


  • 使用多个线程可能会提高总体执行时间的速度,但也可能会使您试图实现的目标变得更加复杂,因此通常应该避免使用,除非速度的提高确实值得

    此外,如果这是由加载网页的人触发的(我怀疑),那么使用线程几乎肯定是一个糟糕的计划。对此进行了更详细的讨论。如果它是从命令行触发的,例如:

    php processTextFile.php

    然后,它可能会对你有利

    至于在这个特殊的情况下,它是否会加快你的处理速度,这将取决于你到底在做什么

    从你如何描述你的问题,你可以尝试做两件事:

  • 在文本文件上运行任务管道。在此上下文中,您在运行第一个任务后接收的数据将与初始数据不同,然后您将通过第二个任务运行此新数据。(例如,可能您有一个JSON编码的对象,第一个任务是将其解码为数组)。如果您正在这样做,那么多线程将不会帮助您,因为每个线程都需要初始化线程时需要使用的数据

  • 在原始文件上执行单独的任务,然后返回处理后的数据以返回结果。在这种情况下,多线程将起作用

  • 如果多线程仍然适用于您的用例,那么:

    • 您可以并行运行30个脚本。您将倾向于只在具有多个处理器或多个内核的机箱上看到性能的提高,因为这将允许计算机同时使用这两个处理器或内核
    • 您可以使用pthread来实现这一点(95%确定,支持该视图)
    • 要了解如何实际使用它,您可能需要查看实现的GitHub项目的示例

    使用多个线程可能会提高总体执行时间的速度,但也可能会使您试图实现的目标变得更加复杂,因此通常应该避免,除非速度的提高确实值得

    此外,如果这是由加载网页的人触发的(我怀疑),那么使用线程几乎肯定是一个糟糕的计划。对此进行了更详细的讨论。如果它是从命令行触发的,例如:

    php processTextFile.php

    然后,它可能会对你有利

    至于在这个特殊的情况下,它是否会加快你的处理速度,这将取决于你到底在做什么

    从你如何描述你的问题,你可以尝试做两件事:

  • 在文本文件上运行任务管道。在此上下文中,您在运行第一个任务后接收的数据将与初始数据不同,然后您将通过第二个任务运行此新数据。(例如,可能您有一个JSON编码的对象,第一个任务是将其解码为数组)。如果您正在这样做,那么多线程将不会帮助您,因为每个线程都需要初始化线程时需要使用的数据

  • 在原始文件上执行单独的任务,然后返回处理后的数据以返回结果。在这种情况下,多线程将起作用

  • 如果多线程仍然适用于您的用例,那么:

    • 您可以并行运行30个脚本。您将倾向于只在具有多个处理器或多个内核的机箱上看到性能的提高,因为这将允许计算机同时使用这两个处理器或内核
    • 您可以使用pthread来实现这一点(95%确定,支持该视图)
    • 要了解如何实际使用它,您可能需要查看实现的GitHub项目的示例
    有些人在遇到问题时会想,“我知道,我会使用线程”,然后两个人就有了问题

    与其尝试并行化这30个脚本,我建议将重点放在提高性能上。当然,这取决于您试图执行的特定任务以及上载的文件有多大

    其中一个瓶颈通常是驱动器的I/O。因此,如果您能找到一种合理的方法来使用ramFS的缓存(对于php脚本)(对于php和shell脚本),它可能会提高执行这些任务的速度

    也就是说,在不了解具体情况的情况下,很难给出任何不含糊的建议:(

    有些人在遇到问题时会想,“我知道,我会使用线程”,然后两个人就有了问题

    与其尝试将这30个脚本并行化,我建议您将重点放在提高性能上。当然,这取决于您需要执行哪些特定任务