Junior — Middle
Оё шумо механизмҳои ҳамоҳангсозиро бо истифода аз sync.WaitGroup дар лоиҳатон истифода бурдаед?
sobes.tech AI
Ҷавоб аз AI
Бале, дар лоиҳаҳои Go аксаран sync.WaitGroup барои ҳамоҳангсозии goroutine-ҳо истифода мешавад. Ин механизм имкон медиҳад, ки интизор шавем, то гурӯҳи вазифаҳои параллелӣ ба анҷом расанд, пеш аз идома додан.
Принсипи кор:
- Объекти
WaitGroupэҷод мешавад. - Пеш аз оғоз кардани ҳар goroutine,
Add(1)даъват мешавад, то ҳисобкунакро зиёд кунад. - Дар дохили goroutine, пас аз анҷоми кор,
Done()даъват мешавад, ки ҳисобкунакро кам мекунад. - Goroutine асосӣ
Wait()-ро даъват мекунад, ки монеъ мешавад, то ҳисобкунак ба сифр расад.
Масалан:
var wg sync.WaitGroup
wg.Add(2) // интизорем 2 goroutine
go func() {
defer wg.Done()
// кори goroutine аввал
}()
go func() {
defer wg.Done()
// кори goroutine дуввум
}()
wg.Wait() // интизорем, то ҳарду анҷом ёбанд
Ин барои ҳамоҳангсозии амалиётҳои параллелӣ ва пешгирии анҷоми барвақти барнома кӯмак мекунад.