我有一个用户上传文本文件的Web应用程序。应用程序读取文本文件并根据文件数据执行30个不同的任务,并在几秒钟后向用户显示输出。
我的方法是编写一个php程序,它将获取文本文件,然后调用不同的脚本(php和unix脚本)来执行30个不同的任务。
我有两个问题:
我可以并行运行30个不同的脚本以节省总体执行时间吗?如果是,那么我应该在php中使用pthread库进行多线程吗?我在一篇文章中读到多线程在Web应用程序中没有帮助以节省执行时间。文章说尽管所有线程都会并行运行,但它们会花费相同的时间,就好像它们按顺序运行一样。
我怎么知道所有线程都结束了?如果我继续检查所有线程的执行情况,那么它不会成为系统资源的开销吗?
答案 0 :(得分:0)
使用多个线程可能会提高整体执行时间的速度,但它也可能使你想要实现的目标变得更加复杂,所以通常应该避免它,除非速度改进真的值得你
此外,如果有人在加载网页时触发(我怀疑),那么使用线程几乎肯定是一个糟糕的计划。这将更详细地讨论here。如果它是从命令行触发的,例如:
<form name="form">
<input type="text" ng-model="name"><br />
<input type="text" ng-model="description"><br />
<input type="file" ng-file-model="image" name="image" />
<button type="submit" ng-click="submit()">submit</button>
</form>
然后它可能会对你有所帮助。
至于在这个特定的情况下,它是否会加快你的处理速度,这将取决于你究竟在做什么。
从你如何说出你的问题,你可能会尝试做两件事:
在文本文件上运行任务管道。在此上下文中,在运行第一个任务后收到的数据与初始数据不同,然后您将通过第二个任务运行此新数据。 (例如,您可能有一个JSON编码对象,第一个任务是将其解码为数组)。如果您这样做,那么多线程将无法帮助您,因为每个线程都需要在您初始化线程时需要使用的数据。
在原始文件上执行单独的任务,然后返回已处理的数据以返回结果。在这种情况下,多线程可以工作。
如果多线程对您的用例仍然有效,那么:
答案 1 :(得分:0)
有些人在面对问题时会思考,“我知道,我会使用线程,&#34;然后两个他们有问题。
我没有尝试并行化这30个脚本,而是建议专注于提高性能。当然,这取决于您尝试执行的具体任务以及这些上载文件的大小。
阻塞点之一通常是驱动器的I / O.因此,如果你能找到合理的方法来使用ramFS的缓存(用于php脚本)(对于php和shell脚本),它可能会提高执行这些任务的速度。
尽管如此,如果不知道具体细节,很难给出任何非模糊的建议:(