Golang_HomeWork/hw06_pipeline_execution/README.md

39 lines
2.0 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

## Домашнее задание №6 «Пайплайн»
Необходимо реализовать функцию для запуска конкуррентного пайплайна, состоящего из стейджей.
Стейдж - функция, принимающая канал на чтение и отдающая канал на чтение,
а внутри в горутине выполняющая полезную работу:
```golang
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 баллов
### Подсказки
- https://github.com/golang/go/wiki/CommonMistakes#using-goroutines-on-loop-iterator-variables
- `go test -v -race -count=100 .`