Size: a a a

2020 June 13

AK

Andrey Kartashov in Go-go!
я просто про более общий случай
источник

AK

Andrey Kartashov in Go-go!
@mr_tron
ну так если переменная на стэке то под неё и не будет каждый раз выделяться память. вот если ссылка на переменную убегает из цикла, то она и будет выделяться каждый раз, но на куче
всё, был не прав, не до конца прочитал вот это
источник

MW

Mr. Wh🦠er in Go-go!
  var concurrency int
 flag.IntVar(&concurrency, "concurrency", 50, "Max Concurrent Requests")
// ...

 concurrentGoroutines := make(chan bool, concurrency)
 var wg sync.WaitGroup

 for _, url := range urls {
   wg.Add(1)
   go func(url string) {
     defer wg.Done()
     concurrentGoroutines <- true
     MakeRequest(url)
     <-concurrentGoroutines
   }(url)
 }

 wg.Wait()


правильно количество одновременно обрабатываемых запрпосов ограничиваю?
источник

AK

Andrey Kartashov in Go-go!
Mr. Wh🦠er
  var concurrency int
 flag.IntVar(&concurrency, "concurrency", 50, "Max Concurrent Requests")
// ...

 concurrentGoroutines := make(chan bool, concurrency)
 var wg sync.WaitGroup

 for _, url := range urls {
   wg.Add(1)
   go func(url string) {
     defer wg.Done()
     concurrentGoroutines <- true
     MakeRequest(url)
     <-concurrentGoroutines
   }(url)
 }

 wg.Wait()


правильно количество одновременно обрабатываемых запрпосов ограничиваю?
да
источник

AK

Andrey Kartashov in Go-go!
но я бы чтение из канала тоже в дефер завернул
источник

SN

Stanislav N. in Go-go!
Mr. Wh🦠er
  var concurrency int
 flag.IntVar(&concurrency, "concurrency", 50, "Max Concurrent Requests")
// ...

 concurrentGoroutines := make(chan bool, concurrency)
 var wg sync.WaitGroup

 for _, url := range urls {
   wg.Add(1)
   go func(url string) {
     defer wg.Done()
     concurrentGoroutines <- true
     MakeRequest(url)
     <-concurrentGoroutines
   }(url)
 }

 wg.Wait()


правильно количество одновременно обрабатываемых запрпосов ограничиваю?
Нет :) у вас будет просто канал с 50 сообщениями максимум в буфере, количество горутин это не ограничит
источник

MW

Mr. Wh🦠er in Go-go!
А как принято для консольных утилит, написанных с помощью flag выводить справку?

if flag.NArg() == 0 {
   flag.Usage()
   flag.Exit(0)
 }


У меня так сделать нельзя, т.к. первый аргумент - это файл, содержащий ссылки, а если он не определен, то читаем из stdin
источник

MW

Mr. Wh🦠er in Go-go!
я сей пример взял за основу
источник

AK

Andrey Kartashov in Go-go!
Stanislav N.
Нет :) у вас будет просто канал с 50 сообщениями максимум в буфере, количество горутин это не ограничит
это ограничит одновременное выполнение MakeRequest
источник

SN

Stanislav N. in Go-go!
Andrey Kartashov
это ограничит одновременное выполнение MakeRequest
Где ограничение то?
источник

s

sexst in Go-go!
Stanislav N.
Нет :) у вас будет просто канал с 50 сообщениями максимум в буфере, количество горутин это не ограничит
Количество горутин не ограничит. Количество одновременно запрашивающих данные не будет превышать 50, остальные будет ждать
источник

AK

Andrey Kartashov in Go-go!
Stanislav N.
Где ограничение то?
блокировка на запись в канал 51го true
источник

MW

Mr. Wh🦠er in Go-go!
но  то тоже справедливое замечание, что название переменной вводит в заблуждение
источник

RS

Roman Sharkov in Go-go!
Mr. Wh🦠er
  var concurrency int
 flag.IntVar(&concurrency, "concurrency", 50, "Max Concurrent Requests")
// ...

 concurrentGoroutines := make(chan bool, concurrency)
 var wg sync.WaitGroup

 for _, url := range urls {
   wg.Add(1)
   go func(url string) {
     defer wg.Done()
     concurrentGoroutines <- true
     MakeRequest(url)
     <-concurrentGoroutines
   }(url)
 }

 wg.Wait()


правильно количество одновременно обрабатываемых запрпосов ограничиваю?
во-первых зачем chan bool если можно chan struct{}?
источник

s

sexst in Go-go!
А chan struct{} совсем перестал быть модным?)
источник

MW

Mr. Wh🦠er in Go-go!
а чем struct лучше?
источник

RS

Roman Sharkov in Go-go!
Mr. Wh🦠er
  var concurrency int
 flag.IntVar(&concurrency, "concurrency", 50, "Max Concurrent Requests")
// ...

 concurrentGoroutines := make(chan bool, concurrency)
 var wg sync.WaitGroup

 for _, url := range urls {
   wg.Add(1)
   go func(url string) {
     defer wg.Done()
     concurrentGoroutines <- true
     MakeRequest(url)
     <-concurrentGoroutines
   }(url)
 }

 wg.Wait()


правильно количество одновременно обрабатываемых запрпосов ограничиваю?
во-вторых похоже что нет, неправильно
источник

MW

Mr. Wh🦠er in Go-go!
он памяти меньше занимает?
источник

н

нелицеприятный... in Go-go!
Mr. Wh🦠er
а чем struct лучше?
занимает 0
источник

MW

Mr. Wh🦠er in Go-go!
ок
источник