如何以最有效的方式在大量文件中搜索搜索词?

时间:2019-02-16 08:20:46

标签: java multithreading

禁止使用Lucene。我有一台装有8核和20 GB RAM的计算机。我有100万个NFS文件。我必须搜索一个搜索词“ Hello World”。我的问题是:

最有效的方法应该是什么?

要产生多少个线程?

如果我可以使用多台计算机,答案将以什么方式改变?我将使用Java进行此操作。 假设我使用ThreadPoolExecutor。它的corePoolSize应该是什么? maximumPoolSize?我想向其提交Callable个任务,该任务将读取文件并使用正则表达式搜索所需的搜索词。

1 个答案:

答案 0 :(得分:1)

Venkat Subramaniam的《 JVM上的编程并发性》 一书中的一句话,关于如何计算线程池的最佳大小:

Number of threads = Number of Available Cores / (1 - Blocking Coefficient)
  

阻塞系数在0到1之间。

阻塞系数是单个线程被阻塞(即等待磁盘I / O之类的时间)的时间百分比。因此,例如,如果该百分比为30,那么您的阻塞系数将为0.3