Junior — Middle
Kokiose situacijose yra tinkama naudoti Semaphore mechanizmą srautų sinchronizavimui?
sobes.tech AI
Atsakymas iš AI
Semaphore (semaforas) mechanizmas naudojamas riboti tėkinių, į kuriuos vienu metu gali prieiti keli srautai, skaičių.
Rekomenduojama naudoti semaforą, kai:
- reikia riboti vienu metu vykdomų operacijų skaičių, pavyzdžiui, prieigos prie jungčių baseino ar riboto skaičiaus failų.
- reikia kontroliuoti paralelizaciją, kad išvengtumėte sistemos perkrovos.
- reikalinga sinchronizacija, kai keli srautai turi laukti, kol bus atlaisvintas išteklius.
iOS semaforai dažnai naudojami asinchroninių užduočių valdymui, pavyzdžiui, laukiant kelių operacijų pabaigos arba ribojant vienu metu vykdomų užduočių skaičių.
Swift pavyzdys naudojant DispatchSemaphore:
let semaphore = DispatchSemaphore(value: 3) // maksimalus 3 srautai vienu metu
func accessResource() {
semaphore.wait() // sumažina skaitiklį, jei 0, srautas blokuojamas
// Darbas su ištekliu
print("Srautas gavo prieigą")
sleep(1) // darbo imitacija
semaphore.signal() // padidina skaitiklį, atlaisvina vietą
}
for _ in 1...10 {
DispatchQueue.global().async {
accessResource()
}
}
Šiame pavyzdyje, ne daugiau kaip 3 srautai gali vienu metu dirbti su ištekliu.