我正在用 Java 编写 Rainbow Table 生成器,现在是时候实现多线程来提高整个过程的速度了。
到目前为止,我有一个 GUI,它调用 SwingWorker 类来处理表构建和数据填充。
SwingWorker 内是一个 Runnable:
private final Runnable populateTable = new Runnable() { //Generate & write to file};
为了调用 populateTable,我实现了一个带有固定线程池的 ExecutorService,该线程池由四个线程组成,用于生成和写入磁盘,run() 方法也是同步的:
ExecutorService executor = Executors.newFixedThreadPool(4);
这就是我变得有些困惑的地方,并且显示出我对多线程的无知。
每个 populateTable run() 都会执行 2000 次操作,然后最终将某些内容写入文件。
populateTable 需要运行 40,000,000 次才能生成足够大的彩虹表供我使用。
使用四个线程运行 2000 次操作、4000 万次的最佳(当然也是高效)方式是什么?
我希望这是有道理的,任何建议或评论将不胜感激。
谢谢
乔什
最佳答案
在线程池上执行 4000 万次某些操作不太可能高效。相反,将工作分为 4 个部分并执行 4 个可运行程序,每个可运行程序计算该部分并以适当的批处理刷新结果。
关于Java Runnable 具有大量任务 Rainbow Table,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9314585/