Чем больше потоков, тем ниже скорость даже при достаточном количестве процессорных ядер. - PullRequest
1 голос
/ 10 февраля 2012

У меня есть приложение, которое может запускать любое количество потоков, каждый поток выполняет одну и ту же задачу: перебирает вектор, содержащий 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 потока, что доказывает, что планировщик был улучшен.

1 Ответ

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

Потоки приносят большинство преимуществ в процессах, связанных с вводом-выводом.Однако, учитывая описанную вами настройку, снижение производительности на 20%, вероятно, является признаком того, что ваши потоки сталкиваются с конкуренцией при некоторых вызовах библиотеки / системы.

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