Senior
Semaphore үлгүсү жөнүндө айтып бер.
sobes.tech AI
AIден жооп
Семафор үлгісі — бул синхрондоштуруу механизми, ал бир убакта ишке ашырылып жаткан операциялардын санын же ресурска кирүүнү чектейт.
Go тилинде, семафор канал аркылуу ишке ашырылат жана бир убакта критикалык бөлүмдү аткара турган горутиндардын санын чектейт.
Жөнөкөй семафордун мисалы Goда:
package main
import (
"fmt"
"sync"
"time"
)
func main() {
sem := make(chan struct{}, 3) // 3 мүмкүнчүлүгү бар семафор
var wg sync.WaitGroup
for i := 0; i < 10; i++ {
wg.Add(1)
go func(id int) {
defer wg.Done()
sem <- struct{}{} // семафорду алуу
fmt.Printf("Goroutine %d ишке кирди\n", id)
time.Sleep(1 * time.Second) // иштин имитациясы
fmt.Printf("Goroutine %d ишти аяктады\n", id)
<-sem // семафорду бошотуу
}(i)
}
wg.Wait()
}
Бул мисалда, бир убакта эң көп үч горутин иштей алат. Семафор параллелизмди чектөө үчүн пайдалуу, мисалы, чектелген ресурстар менен иштөөдө (байланыштар, файлдар жана башка).