Перейти к содержимому

Avito / Авито (тех. собес)

Актуальность: 3 кв 2026

Вопросы: базовые вопросы по Go, структуры.

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.WaitGroup
wg.Add(n)
for range n{
go func{
defer wg.Done()
for range jobs{
networkRequest()
}
}
}
wg.Wait()
}