Чӣ гуна метавон шумораи ҷараёнҳои фаъолро дар барнома назорат кард?
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{}{}
}
Бо ин роҳ, шумораи ҷараёнҳои фаъол назорат карда мешавад ва истифодаи зиёди захираҳо пешгирӣ мешавад.