Модельная задача на работу с файловой системой/потоками.
- https://github.com/h4zzkR/tiny-exe - тестировалось в течение сдачи на курсе по concurrency, тесты можно посмотреть здесь.
Логически задачу можно разделить на несколько частей:
- обход директории
- копирование файлов в новую директорию
- трансляция кода *.gmi файла в *.html
Понятно, что проект может быть большой, поэтому не факт, что в однопоточном режиме трансляция будет работать достаточно быстро.
Будем выполнять эти задачи в многопоточном режиме: синхронизация может потребоваться при копировании файлов в память, транслирование можно производить в read-only режиме.
Для удобства работы с потоками будет использовать их не напрямую, а в составе тредпула (такой я как раз написал в курсе concurrency).
Вместо синхронизации тредов на запись поступим след. образом: будет отдельный тред (класс FSWriter), который будет заниматься записью в фс - под капотом будет тот же тредпул на 1 тред, внутри которого есть очередь задач. Отправляя последовательно задачи в этот тред, получим последовательное исполнение без синхронизации.
- tests