Измерения выполнялись для восьми программ, каждая из которых преобразовывала файл размером 12,8 Мбайт в файл размером 25,6 Мбайт. Соответствующие результаты представлены в табл. В.2.
1. Программа atou (программа 2.4) сопоставима с программой cpW, использующей буфер небольшого размера.
2. Программа atouSS — первый из "быстрых" вариантов реализации, основанных на программе atou. В нем применяются флаги последовательного режима обработки и буфер небольшого размера. Эта, а также две следующие программы сгенерированы на основе одного и того же проекта, atouLBSS, но с определением разных комбинаций макросов.
3. Программа atouLB использует буфер большого размера (8192 байта), но не использует флаги последовательного режима обработки.
4. Программа atouLSFP использует буфер большого размера и флаги последовательного режима обработки, но кроме этого предварительно устанавливает требуемый размер выходного файла. Эта мера продемонстрировала свою высокую эффективность.
5. Программа atouMM использует отображение файлов для операций файлового ввода/вывода и вызывает функции, листинг которых приведен в программе 5.3.
6. Программа atouMT представляет собой многопоточную реализацию приведенной в главе 14 программы, основанной на схеме множественной буферизации без применения асинхронного ввода/вывода.
7. Программа atouOV (программа 14.1) использует перекрывающийся ввод/вывод и не может выполняться на двух системах семейства Windows 9x.
8. Программа atouEX (программа 14.2) использует перекрывающийся ввод/вывод и не будет выполняться на двух системах семейства Windows 9x.
Комментарии
1. Результаты показывают, что применение буферов увеличенного размера и флагов последовательной обработки (а возможно, и сочетания этих факторов) обеспечивает некоторый выигрыш в производительности.
2. Предварительная установка размера выходного файла (atouLSFP) очень эффективна и приводит к резкому повышению производительности на всех однопроцессорных системах. В то же время, преимущества SMP-систем оказались весьма незначительными. Эту же методику можно было применить и в предыдущих примерах копирования файлов.
3. В этих примерах процессорное время составляет лишь незначительную долю общего времени.
4. Помимо того, что использование перекрывающегося ввода/вывода ограничивается системами Windows NT и его трудно программировать, он обеспечивает очень низкую производительность. Заметьте, что основная доля общего времени приходится не на пользовательское или системное время, а на реальное время. Создается впечатление, что в случае NT4 система испытывает трудности с планированием доступа к диску, и это препятствие нельзя было устранить путем изменения размера буфера (как большую, так и в меньшую сторону) до тех пор, пока не были использованы буферы размером 65 Кбайт. В NT5 эта проблема не возникает.
5. Ни расширенный ввод/вывод, ни многопоточный режим не обеспечивают сколько-нибудь заметного повышения производительности.
6. Использование отображения файлов в операциях ввода/вывода способно увеличивать производительность, обеспечивая ее повышение примерно на 30% по сравнению с остальными методами. Результаты для SMP-сервера оказались еще лучшими.
Таблица В.2. Показатели производительности программ преобразования символов из кодировки ASCII в Unicode
|
ЦП |
Pentium III |
Pentium III |
Pentium LT |
Celeron LT |
Xeon |
4×Xeon |
ОС |
W2000 |
W2000 |
W2000 |
XP |
W2000 |
W2000 |
Файловая система |
FAT |
NTFS |
NTFS |
NTFS |
NTFS |
NTFS |
atou |
Реальное время |
3,24 |
7,16 |
33,53 |
6,27 |
5,77 |
2,77 |
Пользовательское время |
0,31 |
0,33 |
0,01 |
0,06 |
0,06 |
0,08 |
Системное время |
0,46 |
0,72 |
3,55 |
0,54 |
0,63 |
0,63 |
atouSS |
Реальное время |
3,77 |
6,21 |
43,53 |
10,12 |
5,68 |
2,48 |
Пользовательское время |
0,20 |
0,23 |
0,11 |
0,07 |
0,04 |
0,14 |
Системное время |
0,52 |
0,81 |
3,17 |
0,04 |
0,35 |
0,81 |
atouLB |
Реальное время |
4,38 |
6,41 |
28,51 |
5,95 |
4,75 |
2,47 |
Пользовательское время |
0,10 |
0,07 |
0,05 |
0,03 |
0,03 |
0,08 |
Системное время |
0,26 |
0,34 |
0,63 |
0,19 |
0,21 |
0,187 |
atouLSFP |
Реальное время |
- |
- |
5,17 |
1,38 |
1,28 |
2,03 |
Пользовательское время |
- |
- |
0,07 |
0,05 |
0,09 |
0,06 |
Системное время |
- |
- |
0,61 |
0,16 |
0,10 |
0,11 |
atouMM |
Реальное время |
4,35 |
2,75 |
3,46 |
3,90 |
3,74 |
0,77 |
Пользовательское время |
0,27 |
0,29 |
0,09 |
0,07 |
0,05 |
0,14 |
Системное время |
0,19 |
0,19 |
0,16 |
0,14 |
0,10 |
0,09 |
atouMT |
Реальное время |
4,84 |
6,18 |
5,83 |
6,61 |
5,99 |
3,55 |
Пользовательское время |
0,14 |
0,15 |
0,26 |
0,04 |
0,06 |
0,02 |
Системное время |
0,45 |
0,46 |
0,66 |
0,33 |
0,15 |
0,31 |
atouOV |
Реальное время |
9,54 |
8,85 |
32,42 |
6,84 |
5,63 |
3,17 |
Пользовательское время |
0,14 |
0,12 |
0,21 |
0,06 |
0,06 |
0,06 |
Системное время |
0,24 |
0,23 |
0,42 |
0,18 |
0,21 |
0,17 |
atouEX |
Реальное время |
5,67 |
5,92 |
30,65 |
6,50 |
5,19 |
2,64 |
Пользовательское время |
1,10 |
1,50 |
0,29 |
0,35 |
0,41 |
0,64 |
Системное время |
1,19 |
1,74 |
0,77 |
0,69 |
0,59 |
1,91 |
Поиск заданных комбинаций символов
Читать дальше