Увеличение производительности во многом зависит от вашего оборудования (у вас есть многоядерный?) И от алгоритма, который вы выполняете параллельно.
Если алгоритм близок к 100% -ной привязке к процессору (например, выполняет только необработанные вычисления для данных в памяти) и вы работаете на одноядерном компьютере, то, к сожалению, вы не увидите значительных улучшений, запустив его в нескольких потоках .
С другой стороны, такой алгоритм может получить почти линейное увеличение производительности, если вы работаете на нескольких ядрах.
Если ваш алгоритм ввода-вывода и процессора, то вы должны увидеть приличный прирост производительности, поточив его даже на одноядерном компьютере. Сколько выигрыша зависит от многих факторов, поэтому я даже не буду указывать здесь число:)
Что касается вашего кода , я бы порекомендовал вам создать одну большую очередь «заданий» (ваш item
объект), а затем создать определенное количество потоков, которые извлекают задания из эта очередь пока не пусто. Потоки будут работать, пока они не увидят, что очередь пуста. Таким образом, вам не придется ждать самого медленного работника, прежде чем выпускать следующую партию. Это должно помочь с общим увеличением производительности.
Просто убедитесь, что очередь защищена механизмом блокировки при снятии очереди, чтобы вы не столкнулись с условиями гонки.