Semaphore
- Kotlin kursu
- İleri seviye
- Ders 68/83
- 5 dk
Semaphore ile sayılı erişim öğrenirsin.
Semaphore ile sınırlandırma
Semaphore, aynı anda sınırlı sayıda coroutine'e izin verir. withPermit { } ile bir permit alınır; blok bitince permit iade edilir.
Örnek: val s = Semaphore(3); s.withPermit { fetch() }. En fazla 3 coroutine aynı anda fetch'i çağırabilir; diğerleri bekler. Mutex bir Semaphore(1) olarak düşünülebilir. Bu kalıp, dış kaynakları aşırı yüklememek için kullanılır.
Permit sayısı ve bekleme
Semaphore(n) ile n permit ayarlanır. Her withPermit bir permit alır; hepsi doluysa coroutine bekler. Bir permit bırakıldığında sıradaki devam eder.
Örnek: Semaphore(2). Üç coroutine withPermit çağırırsa ikisi paralel çalışır, üçüncüsü biri bitene dek bekler. Bu kalıp, paralelliği kontrol altında tutar; sistem kaynaklarını korur.
Uygulama Semaphore ile permit bloğu
main fonksiyonunu runBlocking ile aç. val s = Semaphore(2) oluştur ve s.withPermit { println("permit") } çağrısını ekle. Gerekli içe aktarımları yap.
Başlangıç kodu
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withPermit
// main'i runBlocking ile aç
// iki permitli Semaphore oluştur, withPermit ile yazdırÖrnek çözüm
import kotlinx.coroutines.runBlocking
import kotlinx.coroutines.sync.Semaphore
import kotlinx.coroutines.sync.withPermit
fun main() = runBlocking {
val s = Semaphore(2)
s.withPermit {
println("permit")
}
}Beklenen çıktı
permit
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 withPermit çağrısını tamamla
val s = Semaphore(3)
s.____ { fetch() }
val s = Semaphore(3)
s.withPermit { fetch() }
Açıklama: withPermit bir permit alır ve iade eder.
2 Semaphore(1) ile Mutex arasındaki ilişki nedir?
Semaphore(1) is like Mutex.- İkisi farklı iş yapar
- Mutex Semaphore(0)'dır
- Semaphore(1) Mutex gibi davranır Doğru cevap
- İlişkileri yoktur
Açıklama: Semaphore(1) tek permitli Mutex gibi davranır.
3 Semaphore parçalarını eşle
| Kavram | Anlamı |
|---|---|
Semaphore(3) |
Permit sayısı |
withPermit { } |
Permitli blok |
fetch() |
Sınırlı işlem |
permit iadesi |
Güvenlik |