Skip to content

Files

Latest commit

ddf0bd9 · Aug 2, 2024

History

History

hw06_pipeline_execution

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
Feb 7, 2024
Apr 16, 2024
Feb 7, 2024
Aug 2, 2024
Aug 2, 2024

README.md

Домашнее задание №6 «Пайплайн»

Необходимо реализовать функцию для запуска конкуррентного пайплайна, состоящего из стейджей.

Стейдж - функция, принимающая канал на чтение и отдающая канал на чтение, внутри в горутине берущая данные из входного канала, выполняющая полезную работу и отдающая результат в выходной канал:

func Stage(in <-chan interface{}) (out <-chan interface{}) {
    out = make(chan interface{})
    go func() { /* Some work */ }()
    return out
}

Особенность пайплайна в том, что обработка последующего элемента входных данных должна происходить без ожидания завершения всего пайплайна для текущего элемента.

Т.е. пайплан из 4 функций по 100 мс каждая для 5 входных элементов должен выполняться гораздо быстрее, чем за 2 секунды (4 * 100 мс * 5).

Также должна быть реализована возможность остановить пайплайн через дополнительный сигнальный канал (done/terminate/etc.).

При необходимости можно выделять дополнительные функции.

Нельзя менять сигнатуры исходных функций.

Для большего понимания см. тесты.

Критерии оценки

  • CI-пайплайн зелёный - 5 баллов
  • Добавлены новые юнит-тесты - до 2 баллов
  • Понятность и чистота кода - до 3 баллов

Зачёт от 7 баллов

Подсказки