Kavramlar - Coroutineler
Coroutineler ve Threadler
Lua çok iş parçacıklı (multi-threaded) değildir.
Ancak, coroutine'leri kullanarak çok iş parçacıklı bir davranışı taklit ederiz. Bir coroutine, kendine ait bir yürütme akışına sahip olması bakımından bir thread'e (iş parçacığına) benzer. Coroutine'ler işbirlikçi bir yapıda çalışır; bu da, aynı anda sadece bir tanesi çalışabilse de, diğerlerinin çalışmasına izin vermek için bu "thread'leri" (iş parçacıklarını) yürütme sırasında duraklatabildiğimiz anlamına gelir.
Lua'da bir coroutine oluşturulduğunda geri döndürülen değer thread'lerdir. Bunların özellikleri veya üye fonksiyonları yoktur, ancak hangi coroutine'in yeniden yürütülmeye başlayacağını bildirmek için thread nesneleri coroutine.resume'e iletilir.
Temel Kavramlar
Lua, coroutine işlevselliğini coroutine tablosu aracılığıyla sağlar. Argüman olarak bir fonksiyon alan coroutine.create kullanarak bir coroutine oluşturabilirsiniz. Bu, yeni coroutine'i temsil eden thread türünde bir değer döndürür:
Bir coroutine oluşturulduğunda, askıya alınmış (suspended) durumda başlar:
Bir coroutine'i başlatmak (veya devam ettirmek) için coroutine.resume kullanın. Bu, durumunu askıya alınmış (suspended) durumdan çalışan (running) duruma değiştirir:
Çalışması bittikten sonra durumu ölü (dead) hale gelir:
Akışı Devretme (Yielding)
Coroutine'ler, yürütmelerini duraklatan ve daha sonra devam ettirilmelerine olanak tanıyan coroutine.yield ile kullanışlı hale gelir.
Şimdi, coroutine'i devam ettirmek, onu her seferinde bir yineleme ilerletir:
Ölü bir coroutine'i devam ettirmeye çalışmak bir hatayla sonuçlanır:
resume ve yield Arasında Değer Aktarımı
Coroutine'ler, onları devam ettiren kodla veri alışverişi yapabilir:
Coroutine'e argüman geçirme:
yield'den dönüş değerleri alma:
Askıya alınmış bir coroutine'e değer gönderme:
Coroutine fonksiyonundan değer döndürme:
Ek Kaynaklar
Tüm sunucular · GmodTR Launcher · Rehber · GMod Wiki · GmodTR nedir? · Sunucu ekle · Discord