У меня есть приложение, которое может запускать любое количество потоков, каждый поток выполняет одну и ту же задачу: перебирает вектор, содержащий 5000 сообщений, а затем обрабатывает каждое из них.
между потоками, нет конкуренции ресурсов, нет условий гонки вообще. и на коробке, где я запускаю свое приложение, есть 4 ядра процессора. в то время, когда я запускаю свое приложение, никакой другой процесс не выполняет никакой задачи, потребляющей процессор.
однако, результат, который я получил, как показано ниже.
если запущен только один поток, потоку потребовалось 0,45 секунды для обработки этих 5000 сообщений.
если запущено 4 потока, каждому потоку требуется около 0,55 секунды для обработки этого сообщения, увеличение более чем на 20%.
если есть еще сообщения для обработки, скажем, 150 000 сообщений, то нет разницы между временем обработки при запуске 1 потока или 4 потока.
Я не понимаю, что вызвало увеличение времени, когда было запущено 4 потока, было 4 ядра процессора, достаточно для 4 потоков.
и почему не было увеличения времени, а время обработки было больше?
Я сделал свой тест, используя Linux 2.6.26. планировщик был улучшен с 2.6.18. Я сделал тот же тест, используя 2.6.18, результат был хуже, когда было запущено 4 потока, что доказывает, что планировщик был улучшен.