Книга: Системное программирование в среде Windows
Упражнения
Упражнения
14.1. Воспользуйтесь асинхронным вводом/выводом для слияния нескольких отсортированных файлов в один отсортированный файл большего размера.
14.2. Приводит ли использование флага FILE_FLAG_MO_BUFFERING к повышению производительности программ atouOV и atouEX, как того можно было бы ожидать в соответствии с утверждениями, содержащимися в описании функции CreateFile? Существуют ли какие-либо ограничения, касающиеся размера файлов?
14.3. Модифицируйте программу timebeep (программа 14.3), введя в нее сбрасываемый вручную уведомляющий таймер.
14.4. Модифицируйте клиент именованного канала в программе clientNP (программа 11.2), введя в него перекрывающийся ввод/вывод, чтобы клиент мог продолжать работу после отправки запроса. В результате этого один клиент сможет иметь нескольких невыполненных запросов.
14.5. Перепишите программу serversk (программа 12.2), представляющую сервер на базе сокетов, введя в нее порты завершения ввода/вывода.
14.6. Перепишите одну из программ serverSK или serverNP таким образом, чтобы количество готовых к выполнению рабочих потоков ограничивалось семафором. Выполните эксперименты с большим пулом потоков, чтобы выяснить, насколько эффективен такой альтернативный вариант. Находящаяся на Web-сайте программа serverSM является модифицированным вариантом программы serverNP. С увеличением объемов доступной физической памяти и распространением платформы Win64 относительная ценность этого подхода и портов завершения может варьироваться.
14.7. Используйте программу управления заданиями JobShell (программа 6.3) для работы с большим количеством клиентов и исследуйте сравнительную способность к реагированию серверов serverNP и serverCP. Дополнительную нагрузку могут составить сетевые клиенты. Определите оптимальный интервал значений для количества активных потоков.
- Обзор методов асинхронного ввода/вывода Windows
- Перекрывающийся ввод/вывод
- Пример: использование дескриптора файла в качестве объекта синхронизации
- Пример: преобразование файлов с использованием перекрывающегося ввода/вывода и множественной буферизации
- Расширенный ввод/вывод с использованием процедуры завершения
- Пример: преобразование файла с использованием расширенного ввода/вывода
- Асинхронный ввод/вывод сиспользованием нескольких потоков
- Таймеры ожидания
- Пример: использование таймера ожидания
- Порты завершения ввода/вывода
- Пример: сервер, использующий порты завершения ввода/вывода
- Резюме
- Упражнения