Go Concurrency Pipeline
Суть заключается в том, чтобы написать конвейер функций, в котором STDOUT одной программы передаётся как STDIN в другую программу.
Расчет хеш-суммы реализован следующей цепочкой:
- SingleHash считает значение crc32(data)+"~"+crc32(md5(data)) (конкатенация двух строк через ~), где data - то что пришло на вход.
- MultiHash считает значение crc32(th+data)) (конкатенация цифры, приведённой к строке и строки), где th=0..5, потом берёт конкатенацию результатов в порядке расчета.
- CombineResults получает все результаты, сортирует, объединяет отсортированный результат через _ в одну строку
- crc32 считается через функцию DataSignerCrc32
- md5 считается через DataSignerMd5
Особенности:
- DataSignerMd5 может одновременно вызываться только 1 раз, считается 10 мс. Если одновременно запустятся несколько - будет перегрев на 1 сек
- DataSignerCrc32, считается 1 сек
- На все расчеты 3 сек.
Запуск тестов - go test -v -race