Advertisement
Guest User

Report

a guest
Aug 22nd, 2019
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.71 KB | None | 0 0
  1. Привет, задание выполнено.
  2. +Сжатие реализовано с помощью GzipStream.
  3. +Программа принимает параметры по патерну:
  4.     ConsoleUI.exe [compress/decompress] [sourceFile1.txt] [resultFile1.gz] [sourceFile2.txt] [resultFile2.gz]...
  5. +Программа возвращает 0/1
  6. +Я реализовал некое подобие пула потоков, где методы могут выполнятся одновременно в не более чем n потоков. Если свободных потоков нету, то методы становятся в очередь. Потокобезопасность достигнута с помощью локов.
  7. +Файлы по 10 Гб нормально выполняются с моими 8 Гб RAM.
  8. +Все исключения в логике перехватываются.
  9. +При роботе с потоками использовал только треды
  10. +Программа следует таким ООП принципам:
  11.     - Делегирование
  12.     - Использование композиции вместо наследования
  13.     - Принцип уникальной ответственности
  14.     - Инкапсуляция
  15.     - DRY
  16.  
  17. +Алгоритм:
  18. -Получаю параметры консоли.
  19. -Валидирую
  20. -Создаю специальные обьекты, в которых хранится исходный путь файла и путь результата.
  21. -Выбираю действие (compress/decompress)
  22. -Запускаю методы для компрессии/декомпрессии специальным хендлером, который будет ожидать завершения всех методов.
  23. -В этом хендлере я ставлю в очередь тред пула полученные методы и перехватываю все исключения, которые возникают в них и передаю наверх в помощью out параметра.
  24. -Метод попадает в тред пул. Если количество исполняемых потоков меньше n, то выделяется новый поток, который после отработки метода удаляется, вызывая событие, которое оповещает следующий в очереди метод что поток освободился. Если же потоков n, то метод становится в очередь.
  25.  
  26. +Остановка программы с помощью Ctrl+C не реализована.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement