Я сталкиваюсь с определенным поведением при использовании Amazon EC2 и Java, которое трудно понять.У меня есть код, который использует iText для разделения одного многостраничного PDF-файла на несколько файлов (по одному файлу на страницу).У меня есть около 1 миллиона страниц для извлечения (около 2500 исходных файлов), и поэтому я делаю тесты на EC2, чтобы определить, какая установка лучше всего подойдет для такой работы.
Я создал небольшое приложение (ссылка ниже), которое обрабатывает каждый исходный файл последовательно, без запуска какого-либо рабочего потока, и которое также может выполнять ту же задачу, используя потоки Java через Executors.
На моем локальном Macbook Pro многопоточная версия работает примерно на 30-40% быстрее, чем последовательная, но на каждом экземпляре EC2, который я пробовал, многопоточная версия работала намного хуже, чем последовательная.
Я пробовал с маленьким экземпляром, большим и очень большим процессором.Я пытаюсь понять, что может привести к таким плохим результатам для многопоточной версии;если это что-то с моим кодом, или вводом / выводом в EC2, или просто что для этой конкретной задачи потоки действительно плохой выбор?Я принимаю любые подсказки.
Соответствующий код находится здесь: https://gist.github.com/1641643 (извините за «флаговое программирование», было проще переключаться между тестами).Я пробовал разные значения для Executors.newFixedThreadPool (2, 4, 8 и т. Д.) Без каких-либо существенных изменений в результатах.