Описание однопоточной версии:
- Программа собирает список вопросов.
- Для каждого вопроса получите типовые ответы и пропустите каждый из них через модуль оценки.
- Модуль подсчета очков делает ряд запросов к базе данных (только для чтения).
- Последовательная обработка, подключение к одной базе данных.
Я решил сделать вышеописанную программу многопоточной, разбив список вопросов на куски и создав поток для каждого из них.
Каждый поток открывает собственное соединение с базой данных и работает со своим списком вопросов (около 95 вопросов в каждом из 6 потоков). Приложение ожидает завершения всех потоков, а затем объединяет результаты для отображения.
К моему удивлению, многопоточная версия отработала примерно столько же, заняв около 16 секунд вместо 17.
Вопросы:
Почему я не вижу такого прироста производительности, которого можно было бы ожидать от одновременного выполнения запросов в отдельных потоках с отдельными подключениями? Машина имеет 8 процессоров.
Будет ли SQL Server обрабатывать запросы одновременно, когда они поступают из одного приложения, или он (или сам .net) будет их сериализовать?
Может быть, что-то неправильно сконфигурировано, что ускорит его работу, или я просто довожу SQL Server до предела вычислительных возможностей?
Текущая конфигурация:
Microsoft SQL Server Developer Edition 9.0.1406 RTM
ОС: Windows Server 2003 Standard
Процессоры: 8
ОЗУ: 4 ГБ