Örnek sorular
Un Jobs Burst Dots BasicsZorluk 1
Unity C# Job System'de tek birimlik temel bir job tanımlamak için hangi arayüz uygulanır?
- aIJobParallelFor
- bIJob✓
- cIJobFor
- dIJobParallelForTransform
Açıklama:IJob, tek bir Execute() çağrısı çalıştıran job arayüzüdür; bir worker thread job'ı çalıştırdığında Unity bunu bir kez çağırır.
Un Jobs Burst Dots BasicsZorluk 2
Bir job'da Schedule() yerine Run() çağırıldığında ne olur?
- aAna thread'de hemen, senkron biçimde çalışır✓
- bJob kuyruğa alınır ve bir sonraki karede bir worker thread'de çalışır
- cJob bir worker thread'de çalışır ama Update()'i bloklar
- dRun() yalnızca Editor'de çalıştığı için job atılır
Açıklama:Run(), job'ı iş kuyruğuna sokmadan doğrudan ana thread'de hemen çalıştırır; bu genellikle hata ayıklama için kullanılır.
Un Jobs Burst Dots BasicsZorluk 1
Bir job üzerinde Schedule() çağırmak ne döner?
- aJob'ın sonucunu içeren bir NativeArray
- bZamanlamanın başarılı olup olmadığını gösteren bir bool
- cJob'ı takip etmek için kullanılan bir JobHandle✓
- dÜzerinde yield yapman gereken bir coroutine
Açıklama:Schedule(), zamanlanan job'ı temsil eden ve başka job'lara bağımlılık olarak verilebilen ya da tamamlanabilen bir JobHandle döner.
Un Jobs Burst Dots BasicsZorluk 2
Ana thread, zamanlanmış bir job'ın yazdığı NativeArray'i okumadan önce neden JobHandle.Complete() çağrılmalı?
- aComplete() önce NativeArray'i managed belleğe kopyalar
- bComplete() yalnızca IJobParallelFor için gerekir, IJob için gerekmez
- cComplete() NativeArray'in ayrılmış belleğini otomatik serbest bırakır
- dJob bitene kadar bloklar, veri ancak o zaman güvenle okunabilir✓
Açıklama:Complete(), job bitene kadar bloklar; böylece ana thread aynı NativeContainer'a güvenle erişmeden önce yazmanın tamamlandığı garanti edilir.
Un Jobs Burst Dots BasicsZorluk 2
Bir job için NativeArray<T> ayırdığında sorumluluğun nedir?
- aHiçbir şey — garbage collector onu normal bir managed dizi gibi toplar
- bArtık ihtiyaç kalmadığında Dispose()'u kendin çağırmak✓
- cJob'ın JobHandle'ı tamamlanınca kendini otomatik olarak serbest bırakır
- dUnity'nin altta yatan belleği serbest bırakması için onu null'a atamalısın
Açıklama:NativeArray<T> GC heap dışında, yönetilmeyen bellektir; bu yüzden serbest bırakmak için Dispose()'u açıkça çağırmak senin sorumluluğundadır.
Un Jobs Burst Dots BasicsZorluk 2
Bir job struct'ı neden managed bir sınıf tipinde alan tutamaz (örneğin normal bir C# List<int> ya da bir MonoBehaviour referansı)?
- aJob verisi, worker thread'den güvenle erişilebilsin diye blittable/unmanaged olmalı✓
- bManaged alanlara izin verilir ama yalnızca job Schedule() yerine Run() kullanıyorsa
- cManaged alanlara yalnızca IJobParallelFor içinde izin verilir, IJob'da verilmez
- dUnity derleme zamanında managed alanları otomatik olarak NativeArray'e çevirir
Açıklama:Job'lar worker thread'lerde çalışır ve blittable/unmanaged veri kullanmalıdır; böylece job sistemi managed GC heap'e dokunmadan veriyi güvenle kopyalayıp erişebilir.