39 lines
2.0 KiB
Markdown
39 lines
2.0 KiB
Markdown
## Домашнее задание №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 .`
|