Как реализовать простое формирование трафика в go

#multithreading #go #rate

#многопоточность #Вперед #Оценить

Вопрос:

Я пытаюсь в качестве упражнения реализовать simple traffic shaper в go.

API: push (int): помещает значение int в формирователь out(): выводит 1 или более значений int (ов) из формирователя.

клиенты вызывают push, и скорость не поддается контролю. out вызывается примерно каждые 1 мс и может выводить 1 или более целых чисел и пытается поддерживать постоянную скорость вывода r целых чисел за 1 с, но может выводить больше, если внутренний буфер формирователя находится под угрозой заполнения. Однако выходные данные должны быть как можно более однородными. Например: Выход: 1 1 2 2 2 1 лучше, чем Выход: 1 1 5 1 1

поскольку второй пример является пакетным (на выходе получается 5 целых).

У меня есть идея, как это сделать, используя алгоритм «дырявого ведра».

Мой вопрос: Как реализовать в Go, чтобы вывод вызывался полурегулярно примерно с интервалом в 1 мс?

Комментарии:

1. Пытались ли вы это сделать, используя алгоритм «дырявого ведра»? С какими проблемами вы столкнулись?

2. Этот вопрос, похоже, требует полной реализации. Можете ли вы сузить его до одного вопроса, на который может быть правильный ответ?

Ответ №1:

Как реализовать в Go, чтобы вывод вызывался полурегулярно примерно с интервалом в 1 мс?

Используйте стандартное время.Бегущая строка, настроенная на сброс выходных данных каждые 1 миллисекунду.

Комментарии:

1. Спасибо, Джесси, именно то, что я искал.