Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Привет, задание выполнено.
- +Сжатие реализовано с помощью GzipStream.
- +Программа принимает параметры по патерну:
- ConsoleUI.exe [compress/decompress] [sourceFile1.txt] [resultFile1.gz] [sourceFile2.txt] [resultFile2.gz]...
- +Программа возвращает 0/1
- +Я реализовал некое подобие пула потоков, где методы могут выполнятся одновременно в не более чем n потоков. Если свободных потоков нету, то методы становятся в очередь. Потокобезопасность достигнута с помощью локов.
- +Файлы по 10 Гб нормально выполняются с моими 8 Гб RAM.
- +Все исключения в логике перехватываются.
- +При роботе с потоками использовал только треды
- +Программа следует таким ООП принципам:
- - Делегирование
- - Использование композиции вместо наследования
- - Принцип уникальной ответственности
- - Инкапсуляция
- - DRY
- +Алгоритм:
- -Получаю параметры консоли.
- -Валидирую
- -Создаю специальные обьекты, в которых хранится исходный путь файла и путь результата.
- -Выбираю действие (compress/decompress)
- -Запускаю методы для компрессии/декомпрессии специальным хендлером, который будет ожидать завершения всех методов.
- -В этом хендлере я ставлю в очередь тред пула полученные методы и перехватываю все исключения, которые возникают в них и передаю наверх в помощью out параметра.
- -Метод попадает в тред пул. Если количество исполняемых потоков меньше n, то выделяется новый поток, который после отработки метода удаляется, вызывая событие, которое оповещает следующий в очереди метод что поток освободился. Если же потоков n, то метод становится в очередь.
- +Остановка программы с помощью Ctrl+C не реализована.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement