#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. Спасибо, Джесси, именно то, что я искал.