Для практики написания конкурентных программ мы напишем программу, которая рекурсивно проходит по файлам в указанной директории и посчитает количество слов во всех файлах. Подсчет слов в последовательной версии программы уже реализован. Вам нужно реализовать 2 параллельные версии этой программы.
- В первой версии (
parallel
) подсчет слов для каждого файла должен быть реализован в отдельной горутине. - Во второй версии (
limited-parallel
) мы должны ограничить уровень параллелизма запустив воркер горутины в колличестве, равном количеству ядер процессора. Эти горутины должны через канал получать задание для рассчета слов
После запуска программы запустите make cpu-profile
и make trace-profile
чтобы визуально просмотреть профили программы.
В трейс файле для sequential
режиме вы должны видеть загрузку только одного ядра. Для parallel
- большое кол-во горутин (даже слишком), которые распределены между разными ядрами и для limited-parallel
- кол-во горутин соизмеримое с кол-вом ядер.
В cpu-профайле вы можете увидеть различные виды графиков и флейм-чартов для того чтобы понять на что процессор тратит свое время.
Конфигурация уже реализована. Она позволяет выбрать директорию, режим запуска и пути для создания файлов с cpu-профилем и трейсингом.
Запустите программу с помощью make run path=<path> mode=<mode>
, например make run path=.. mode=parallel
. Параметр path
- путь до директории, в которой будут производиться вычисления. Параметр mode
- режим запуска программы. Возможные значения: sequential
, parallel
, limited-parallel
. По умолчанию sequential
.
Все режимы должны выводить в консоль одинаковое количество слов для одной и той же директории.