Skip to content

stovpyak/gzip

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

30 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gzip

Архивируем файлы

"Количество потоков в зависимости от кол-ва процессоров и памяти". Нужно распаралеливать

  1. Нужно использовать все ядра процессора. Что можно распаралелить? 1.1) Чтение исходного файла. Можно ли одновременно читать несколькими потоками один файл (его разные части)? Даст ли это прирост производительности? 1.2) Само архивирование. Каждому потоку (ArchiveWorker) отдать порцию данных для архивирования. 1.3) Создание одного итогового файла. Можно ли как то распаралелить этот этап?

  2. Есть ограничение на оперативную память - явно нельзя просто прочитать весь файл в память - читать будем порциями. Видимо размер порции для одного ArchiveWorker должен быть не более чем СвободнаяПамять/кол-во ArchiveWorker/2 делим на два, так как исходный кусок будем ещё архивировать в памяти.

  • Нужно получать информацию о системе (возможно о ее текущем состоянии загруженности процессоров и свободной памяти) Контракт у кого это можно запросить, чтобы эмулировать разное состояние системы в тестах.
  • Стратегия распаралеливания в отдельный класс, чтобы можно было менять.
  • Процесс выполнения нужно логировать Куда записывать информацию - в абстракцию логер. В тестах будет dummy или spy чтобы отслеживать кол-во потоков. Затем в файл и (или) в консоль. Лог на уровне всего приложения или у каждого потока свой? Если общий, то как будут разделять его (одновременно записывать).

Обработка ошибок:

  • файл source не найден
  • файл target уже есть
  • на диске не зватает места для записи
  • не хватает памяти?

План: Версия 1) "Знакомство с GzipStream"

  • Все в одной нитке
  • Параметров нет
  • Библиотека, а не консольное приложение Тест? Архивируем , разархивируем, сравниваем с изначальным файлом
  • Пустой файл
  • Обычный текстовый
  • Видео
  • Большой файл
  • Файл превышающий требования

Версия 2) "Потоки"

  • Пробуем распаралелить - пока на заданное константой кол-во.
  • возможно понадобиться элементарный лог.

Версия 3) "Стратегии распаралеливания"

  • получение инфо о системе и создание нужного кол-ва потоков.

Версия 4) "Логирование"

Версия 5) "Консольное приложение"

Версия 6) "Выход по ctrl+c"

Версия 7) "Прогресс бар и прогноз времени выполнения"

About

Архивируем файлы

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages