我正在用Java编写Rainbow Table生成器,现在是实现多线程以提高整个过程速度的时候了。
到目前为止,我有一个GUI,它调用一个SwingWorker类来处理表构造和数据填充。
在SwingWorker中是Runnable:
private final Runnable populateTable = new Runnable() { //Generate & write to file};
为了调用populateTable,我实现了一个带有FixedThreadPool的ExecutorService,它由四个线程组成,用于生成和写入磁盘,run()方法也是同步的:
ExecutorService executor = Executors.newFixedThreadPool(4);
这就是我变得有些困惑的地方,并且在涉及多线程时表现出我的无知。
每个populateTable run()在最终将某些内容写入文件之前执行2000次操作。
populateTable需要运行40,000,000才能生成足够大的彩虹表供我使用。
运行2000次操作的最佳(当然也是有效的)方式是什么,使用四个线程进行4000万次?
我希望这是有道理的,任何建议或意见都会受到高度赞赏。
由于
约什
答案 0 :(得分:1)
在线程池上执行4000万次的某些操作不太可能有效。相反,将工作分成4个部分并执行4个runnable,每个runnable计算该部分并以适当的批次刷新结果。
答案 1 :(得分:1)
如果你想在函数计算部分有更高的效率,那么每个产生四个线程,每个线程重复1/4。如果您需要更多内容,则必须忘记Java并转到this。