我有超过1500个正则表达式模式,需要在相同的100 - 200 kb文本文件上运行并返回成功模式列表。文件来自外部,因此我无法对该文件做任何假设。
问题是,我能以某种方式使处理速度比将所有这些正则表达式运行到同一文本更快吗?
逻辑上输入文件是相同的,后来的正则表达式可以使用已经处理过的一些信息。如果我们认为每个正则表达式都是有限自动化的,那么运行1500个有限自动机到相同的文本,肯定比运行一个加入自动化的速度慢。所以问题是,我可以以某种方式创建加入正则表达式吗?
答案 0 :(得分:4)
这是利用线程的绝佳机会。将您要处理的文件读入一个字符串,然后启动一系列消费者线程。让你的主线程将每个正则表达式放入一个队列,然后让消费者中断下一个队列,编译正则表达式,并在字符串上运行它。共享内存意味着您可以在同一个字符串上运行多个表达式,即使在弱计算机(2个内核,而不是超线程)上,如果您将消费者池保持在合理的大小,您也会注意到显着的速度提升。在一个非常大的服务器上 - 比如32个超线程核心?你可以拥有一个漂亮的脂肪池,并立即通过这些正则表达式。
答案 1 :(得分:3)
我认为这在理论上是可能的,但似乎是一项非平凡的任务。可能的方法可能是:
优化将是关键步骤,因为输入很长(100-200kb)。内存可能是一个问题,而性能可能会变得更糟。我不知道是否存在用于此目的的库,但这里是theoretical answer。