самих? допустим, я создаю горутины, которые каждая по отдельности сначала себя инициализирует какое-то время, затем дожидается остальных, чтобы всем вместе одновременно бахнуть кучей, скажем, запросов?
придумал пока сделать вейтгруппу, чтоб вот как то так:
for ... {
wg.Add(n)
go func() {
initSomething()
wg.Done()
wg.Wait()
doSomethingAtSameTime()
}
}
но возможно, что есть какой-то более лаконичный способ
Никто не подскажет, да?(
А оно точно надо? Горутины все равно не будут строго одновременно работать
да, мне очень очень нужно сделать подобие нагрузочного тестирования, чтобы удостовериться, что хендлеры для сервера могут параллельно обрабатывать коннекты и не переругаться между собой
Ну можно вашим вариантом, вроде ок
нормально, только wg.add надо из цикла вытащить
мне он не нравится( есть подозрение, что куча локов на wait одной группы некорректно будет себя вести. хотя вроде там каналы.. хрен его знает
ну короче да, я наверное попробую, потом отпишусь
Ну в каналах тоже лок есть
Есть же наверное какой-нибудь паттерн оркестрации горутин...
да я думаю под это даже пакетик какой-нибудь есть с 1.5 звездочками, да вот найти не могу) наверное есть, потом попытаюсь поглубже покопать, сейчас так если работает то круто
звучит как бродкаст
бродкаст чего?) мне нужно протестить, что в хендлерах сервера не будет никаких гонок, и что они смогут параллельно обрабатывать 100500 запросов
Так можно просто 100500 запросов запустить не парясь, если я не ошибаюсь, одновременно запустить из-за архитектуры планировщика не выйдет
ну если есть канал в который уперлись n горутин, то его закрытие будет бродкастом для старта работы горутин
а ещё я очень хочу заюзать sync.Cond но каждый раз получается что проще делать без него
Проще if + канал, ага
ааааааа, так вот для чего он нужен
ну там есть метод бродкаст
а в чем проблема дождаться через wait инициализации, а потом раскидывать через канал работу (запросы)?
Обсуждают сегодня