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

10000 параллельных запросов, число потоков и т.д.

go · concurrencyAvito / Авито (тех. собес)3 кв 2026не решено

10000 параллельных запросов, число потоков и т.д.

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()
}

Источник: Avito / Авито (тех. собес) · 3 кв 2026

← Необходимо проверить 2 строки, являются… · Все задачи · Go · Что выведет? →