如何在字符串上并行执行繁重的过程

时间:2018-07-23 13:06:24

标签: java multithreading

我想并行处理字符串中的一个过程以使其更快,该过程是由多个方法完成的。

String s = process1(sourcepage);
                s= process2(s);
                s= process3(s);
                s= process4(s);
                s= process5(s);
                s= process6(s);
                s= process7(s);
                s= process8(s);
                s= process9(s);
                s= process10(s);
                s= process11(s);

在知道process(n)process(n-1)的结果执行的情况下,如何并行化该过程以使其更快。

假设字符串是HTML,而process(i)是去除HTML中的标记(部分代码)。

因此,例如,我们要从HTML中删除页脚以及<div =class="something"><h1>

非常感谢您

1 个答案:

答案 0 :(得分:1)

假设您知道某个进程无法修改s,请并行化这些进程!


假设这是修改参数,则不能仅仅因为可能会丢失一些修改而并行运行此参数。

假设您有三个过程:

  • p1:修剪String
  • p2:将每个${string}替换为Map<String, String>中的值
  • p3:为了安全起见,请替换一些字符。

并行运行它们,每个将更新不同的String,最后一个将为您提供结果。现在,您可以获取每个String并尝试通过检查更改来合并它们,但这将变得很复杂。

请注意,如果p3p2之前运行,则可能会导致某些字符需要删除。

我有两个建议:

  • 并行处理流程中的逻辑。
  • String分开(并行)进行处理,然后将结果合并在一起。需要在“安全”的地方对此进行拆分。

如果要读取结构文本(例如JSON或XML),第二种解决方案将变得复杂,但是可以通过正确解析格式然后处理每个“节点”来解决。

基于这些处理,两种解决方案都可以完成或不可能。由您选择。

编辑:

  

假定字符串是一个“ HTML”,而过程(i)是删除HTML中的标记(部分代码)。

然后,您应该可以拆分“ HTML”以分别处理每个标签。使用XML库,这将非常安全。