Sobes.tech
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() // интизорем, то ҳарду анҷом ёбанд

Ин барои ҳамоҳангсозии амалиётҳои параллелӣ ва пешгирии анҷоми барвақти барнома кӯмак мекунад.