Множество потоков, соревнующихся между собой за обладание единственным ресурсом
Целью этой серии тестов являлось сравнение эффективности различных стратегий реализации функций управления очередями программы 10.4 с использованием программы 10.5 (трехступенчатый конвейер) в качестве тестового приложения. Тесты выполнялись на четырехпроцессорной (Intel Xeon, 1 ГГц) системе Windows 2000 Server с организацией 1, 2, 4, 8, 16, 32 и 64 потоков, но во всех семи случаях каждого потока поручалось выполнение 1000 единиц работы. В идеальном случае можно было бы ожидать линейного увеличения реального времени с увеличением количества потоков, но соревновательность между потоками за право владения единственным мьютексом (или объектом CS) может приводить к нелинейному снижению этого показателя). Обратите внимание, что эти тесты не затрагивают файловую систему.
Использовались шесть различных стратегий реализации, результаты применения которых представлены в отдельных столбцах табл. В.5.
Таблица В.5. Производительность многопоточных реализаций на четырехпроцессорном сервере
К-во потоков | Широковещат.модель | Широковещат.модель | Широковещат. модель | Сигнальная модель | Сигнальная модель | Сигнальная модель | |
Mtx, Evt | CritSec, Evt | Mtx, Evt | Mtx, Evt | CritSec, Evt | Mtx, Evt | ||
Т/О 5мс | Т/О 25мс | SigObjWait | Т/О неопределен | Т/О неопределен | SigObjWait | ||
Реальное время | 0,03 | 0,03 | 0,05 | 0,05 | 0,03 | 0,05 | |
Пользовательское время | 0,03 | 0,06 | 0,03 | 0,05 | 0,08 | 0,05 | |
Системное время | 0,06 | 0,02 | 0,09 | 0,08 | 0,02 | 0,06 | |
Реальное время | 0,14 | 0,27 | 0,09 | 0,08 | 0,06 | 0,08 | |
Пользовательское время | 0,13 | 0,05 | 0,14 | 0,17 | 0,11 | 0,08 | |
Системное время | 0,11 | 0,06 | 0,16 | 0,09 | 0,11 | 0,17 | |
Реальное время | 0,39 | 0,59 | 0,23 | 0,19 | 0,16 | 0,20 | |
Пользовательское время | 0,18 | 0,17 | 0,22 | 0,26 | 0,17 | 0,19 | |
Системное время | 0,30 | 0,22 | 0,41 | 0,31 | 0,22 | 0,31 | |
Реальное время | 0,83 | 0,92 | 0,73 | 0,36 | 0,34 | 0,36 | |
Пользовательское время | 0,34 | 0,36 | 0,55 | 0,52 | 0,45 | 0,45 | |
Системное время | 0,98 | 1,00 | 1,00 | 0,69 | 0,39 | 0,75 | |
Реальное время | 2,42 | 2,30 | 2,38 | 0,75 | 0,69 | 0,75 | |
Пользовательское время | 1,17 | 1,31 | 1,22 | 0,81 | 0,81 | 0,88 | |
Системное время | 3,69 | 3,05 | 3,39 | 1,45 | 1,08 | 1,33 | |
Реальное время | 7,56 | 7,50 | 7,98 | 1,50 | 1,50 | 1,50 | |
Пользовательское время | 3,33 | 3,73 | 2,56 | 1,75 | 1,69 | 1,78 | |
Системное время | 12,52 | 10,72 | 11,03 | 3,13 | 2,00 | 2,69 | |
Реальное время | 27,72 | 26,23 | 29,31 | 3,14 | 2,95 | 3,20 | |
Пользовательское время | 7,89 | 10,75 | 7,22 | 3,73 | 3,69 | 3,47 | |
Системное время | 46,70 | 40,33 | 36,67 | 6,28 | 3,89 | 5,47 |
В комментариях, помещенных вслед за программой 10.4, обсуждаются результаты и разъясняются преимущества различных реализаций, а здесь мы лишь отметим, что результаты для сигнальной модели изменяются пропорционально изменению количества потоков, тогда как в случае широковещательной модели, особенно для вариантов с 32 и 64 потоками, это не так. Можно также видеть, что в случае широковещательной модели система потребляет значительную долю процессорного времени, ибо выполняются, вычисляют предикат и осуществляют немедленный возврат в состояние ожидания множество потоков.
1. Широковещательная модель, мьютекс (Mtx), событие (Evt), раздельные вызовы функций освобождения и ожидания. Конечный период ожидания (Time-out, TO) устанавливался равным 5 миллисекундам, что являлось оптимальным значением для 16-поточного варианта.
2. Широковещательная модель, объект CRITICAL_SECTION (CritSec), событие, раздельные вызовы функций освобождения и ожидания. Настраиваемый период ожидания устанавливался равным 5 миллисекундам, что являлось оптимальным значением для 16-поточного варианта.
3. Широковещательная модель, мьютекс, событие, атомарный вызов SignalObjectAndWait (SigObjWait).
4. Сигнальная модель, мьютекс, событие, раздельные вызовы функций освобождения и ожидания.
5. Сигнальная модель, объект CRITICAL_SECTION, событие, раздельные вызовы функций освобождения и ожидания.
6. Сигнальная модель, мьютекс, событие, атомарный вызов SignalObjectAndWait.