Java Runnable с большим количеством задач Rainbow Table - PullRequest
0 голосов
/ 16 февраля 2012

Я нахожусь в процессе написания генератора Rainbow Table на Java, и пришло время реализовать многопоточность для увеличения общей скорости процесса.

Пока у меня есть графический интерфейс, которыйвызывает класс SwingWorker, который обрабатывает создание и заполнение таблиц данными.

Внутри SwingWorker есть Runnable:

private final Runnable populateTable = new Runnable() { //Generate & write to file};

Чтобы вызвать populateTable, я реализовал ExecutorService с FixedThreadPool.метод run (), состоящий из четырех потоков для генерации и записи на диск, также синхронизируется:

ExecutorService executor = Executors.newFixedThreadPool(4);

В этот момент я несколько запутался и проявляю свое невежество, когда дело доходит домногопоточность.

Каждый метод populateTable выполняет (2000) операций, прежде чем наконец что-то записать в файл.

populateTable необходимо запустить 40000000, чтобы сгенерировать достаточно большую радужную таблицу для меняиспользовать.

Каков наилучший (и, конечно, эффективный) способ запустить 2000 тВремя операции, 40 миллионов раз с использованием четырех потоков?

Надеюсь, это имеет смысл, и любые советы или комментарии будут высоко оценены.

Спасибо

Джош

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Если вы хотите большей эффективности в части вычисления функций, создайте четыре потока с 1/4 итерациями в каждом.Если вам нужно что-то большее, вам придется забыть о Java и перейти на this .

1 голос
/ 16 февраля 2012

Выполнение чего-либо в пуле потоков 40 миллионов раз вряд ли будет эффективным. Вместо этого разделите работу на 4 части и выполните 4 runnables, каждая из которых вычисляет эту часть и сбрасывает результаты в соответствующие партии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...