Один процесс, несколько потоков - по нескольким причинам.
При переключении контекста между заданиями на некоторых процессорах дешевле переключаться между потоками, чем между процессами. Это особенно важно в случае такого рода операций ввода-вывода с большим количеством рабочих, чем ядер. Чем больше работы вы выполняете между блокировкой ввода / вывода, тем менее важно это. Хорошая буферизация окупит потоки или процессов.
При переключении между потоками в одной и той же JVM, по крайней мере, некоторые реализации Linux (в частности, x86) не должны очищать кэш. См. Блог Тсуны . Загрязнение кэша между потоками будет сведено к минимуму, поскольку они могут совместно использовать программный кэш, выполняют одну и ту же задачу и совместно используют одну и ту же копию кода. Мы говорим об экономии от порядка сотен наносекунд до нескольких микросекунд на коммутатор. Если это маленькая картошка для вас, тогда читайте дальше ...
В зависимости от конструкции путь данных ввода / вывода может быть короче для одного процесса.
Время запуска и прогрева потока обычно намного короче. ОС не должна запускать процесс, Java не должна запускать другую JVM, загрузка классов выполняется только один раз, JIT-компиляция выполняется только один раз, а оптимизация HotSpot выполняется один раз и раньше.