Junior — Middle
Ինչպե՞ս կարելի է վերահսկել ծրագրում ակտիվ հոսքերի թիվը։
sobes.tech AI
Պատասխան AI-ից
Go լեզվում սովորաբար ակտիվ հոսքերի (goroutines) քանակը վերահսկելու համար օգտագործվում են սինխրոնիզացիայի և պարալելիզմի սահմանափակման մեխանիզմներ՝
-
Բուֆերային ալիքներ որպես սեմաֆորներ: ստեղծում են սահմանափակ ծավալով ալիք և նախքան goroutine սկսելը ուղարկում այնտեղ արժեք, իսկ ավարտից հետո ընդունում այն, այդպիսով սահմանափակելով միաժամանակ աշխատող goroutine-ների քանակը:
-
sync.WaitGroupփաթեթը: օգնում է սպասել goroutine-ների խմբի ավարտին, բայց չի սահմանափակում նրանց քանակը: -
golang.org/x/sync/semaphoreփաթեթը: ապահովում է հարմար սեմաֆոր՝ պարալելիզմը սահմանափակելու համար:
Օրինակ սեմաֆորային ալիքով:
sem := make(chan struct{}, 5) // առավելագույնը 5 goroutine միաժամանակ
for _, task := range tasks {
sem <- struct{}{} // բլոկավորում է, եթե արդեն 5 goroutine է աշխատում
go func(t Task) {
defer func() { <-sem }() // ազատում է տեղը
process(t)
}(task)
}
// սպասում ենք, մինչև բոլոր goroutine-ները ավարտվեն
for i := 0; i < cap(sem); i++ {
sem <- struct{}{}
}
Այս կերպ կարելի է վերահսկել ակտիվ հոսքերի քանակը և խուսափել ռեսուրսների գերօգտագործումից։