10000 параллельных запросов, число потоков и т.д.
Условие
Заголовок раздела «Условие»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.WaitGroupwg.Add(n)for range n{go func{defer wg.Done()for range jobs{networkRequest()}}}
wg.Wait()}Решение
Заголовок раздела «Решение»Источник: Avito / Авито (тех. собес) · 3 кв 2026
← Необходимо проверить 2 строки, являются… · Все задачи · Go · Что выведет? →