Так что я часто сталкиваюсь с этой проблемой с go
. Предположим, у меня есть текстовый файл со 100 000 строк текста. Теперь я хочу сохранить все эти строки в db. Так что я хотел бы сделать что-то вроде этого:Ограничение количества выполняемых одновременных задач
file, _ := iotuil.ReadFile("file.txt")
fileLines := strings.Split(string(file), "\n")
Теперь я перебираем все строки в файле:
for _, l := range fileLines{
saveToDB(l)
}
Теперь я хочу бежать этот saveToDB
Func одновременно:
var wg sync.WaitGroup
for _, l := range fileLines{
wg.Add(1)
go saveToDB(l, &wg)
}
wg.Wait()
Я не знаю, является ли это проблемой или нет, но будет работать 100 000 одновременных функций. Есть ли способ сказать, что нужно запустить 100 одновременных функций, подождите, пока все закончится, а затем запустите еще 100.
for i, _ := range fileLine {
for t = 0; t < 100; t++{
wg.Add(1)
go saveToDB(fileLine[i], &wg)
}
wg.Wait()
}
Нужно ли мне что-то делать или есть ли более чистый способ этого? Или у меня 100 000 одновременных задач не проблема?
больше читать по теме: http://nesv.github.io/golang/2014/02 /25/worker-queues-in-go.html – Rodrigo