Avito / Авито (тех. собес)
Актуальность: 3 кв 2026
Вопросы: базовые вопросы по Go, структуры.
Задача: 10000 параллельных запросов, число потоков и т.д. go/concurrency
Заголовок раздела «Задача: 10000 параллельных запросов, число потоков и т.д. go/concurrency»package main
import("fmt ""time ")
const numRequests= 10000
var count int
var mux sync.Mutex
func networkRequest() {time.Sleep(time.Millisecond) // Эмуляция сетевого запроса.mux.Lock()count++mux.Unlock()}
func main() {n= 10// число воркеровjobs:=make(chan int, n)runtime.GOMAXPROCS(1)
go func{// defer wg.Done()for i:=0; i<numRequests; i++{jobs<-i}close(jobs)}
run(n, jobs)fmt.Println(count) // 10000, time 10000 * time.Millisecond в один потокfmt.Println(count) // 10000, time 1000 * time.Millisecond в 10 потоковfmt.Println(count) // GOMAXPROCS(1) один поток, горутины паркуются на время слипа ~1000 * time.Millisecond}
func run(n int, jobs chan) {wg:=sync.WaitGroupwg.Add(n)for range n{go func{defer wg.Done()for range jobs{networkRequest()}}}
wg.Wait()}