Geliştirici günlüğü

Geliştirici Günlüğü #26: Modlar için nüfus ve pazar hesapları

Mod arayüzündeki nüfus ve pazar işlemlerinin ilk ağır ölçek ölçümünü, sonuçları ve bu ölçümün tam oyun hızını göstermediğini açıklıyoruz.

İçindekiler
Harita üzerinde nüfus kümeleri, pazar noktaları ve üretim atölyeleri şeffaf bir oyun kuralı çerçevesinde bağlanıyor

Kısaca: MKA Engine’in modlara—oyuna yeni kural veya içerik ekleyen eklentilere—nüfus, pazar ve üretim hesapları için ortak işlemler açmasını sınadık. İlk büyük ölçek denemesinde 2 milyon nüfus grubu, 30.000 konum ve 512 pazar kullandık; ölçülen adımlar motorla doğrudan çalışan modda 170–251 ms, taşınabilir eklenti biçiminde 206,7–254,8 ms sürdü. Bu, özellikle ağır seçilmiş bir mod senaryosudur; tam bir oyun gününü veya sonraki iyileştirmelerin sonucunu göstermez.

Sorun ne idi?

Bir oyun nüfusun büyüme ve göç oranlarını, malların alım-satım eğrilerini ve üretim önceliklerini kendisi belirler. Motorun görevi bu oyun kurallarını seçmek değildir; modun belirlediği girdilerle ortak hesapları çalıştırmaktır. Burada mod, oyuna ek kural ya da içerik getiren bir uzantıdır.

Nüfus gruplarını saymak veya taşımak, pazar fiyatı aramak ve sınırlı üretim kapasitesini dağıtmak bu uzantıların kullanabileceği işlemler arasına eklendi. Önemli soru, bu esnekliğin büyük bir dünyada günlük iş yüküne ne yaptığıydı. Özellikle mod her nüfus grubuna her gün dokunursa, arayüzün ve motorun bu yolu nasıl taşıdığını görmemiz gerekiyordu.

Nasıl çözdük?

Modlara nüfusları ortak özelliklerine göre toplama, nüfus hareketi hesaplama, pazar takası ve fiyat çözme, üretim kapasitesini dağıtma ve üreticinin olası kârını değerlendirme gibi işlemler sunduk. Bunlar oyun içeriğinin yerine geçmez: büyüme oranı, hangi malların bulunduğu, arz-talep eğrileri, ticaret ve üretim öncelikleri oyunun kurallarıdır. Motor verilen verilerle hesap yapar.

Büyük ölçek denemesinde iki mod biçimini ayrı ayrı çalıştırdık: motorla doğrudan çalışan mod ve farklı sistemlerde çalışabilen taşınabilir eklenti. Deneme dünyasında 2 milyon nüfus grubu, 30.000 konum ve her biri tek ürün içeren 512 pazar vardı. Mod her gün bütün nüfus gruplarını işledi; ayrıca grupları konuma göre topladı ve her pazarda takas ile fiyat çözümü yaptı. Bu, seyrek değişim yapan bir oyunun olağan davranışı değil, bilerek ağır seçilmiş bir senaryoydu.

Büyük test haritasındaki tüm nüfus kümeleri günlük işlem yolundan pazar noktalarına ilerliyor; bu, özellikle ağır seçilmiş bir senaryo

Ne gördük?

Bir ısınma gününden sonra üç ölçülen oyun gününün ortalamasını aldık. Ölçümler Linux makinesinde, sistem yük göstergesi (çalışan ve sırada bekleyen işlerin yoğunluğunu kabaca gösterir) 6,3–7,0 aralığındayken yapıldı. İşçi sayısı, motorun aynı anda işi paylaştırdığı görevli sayısını gösterir.

Modun çalıştırıldığı biçimİşçi sayısıÖlçülen adımNüfus işlemleri
Doğrudan çalışan mod1251,0 ms167,5 ms
Doğrudan çalışan mod8170,0 ms149,3 ms
Taşınabilir eklenti1254,8 ms175,1 ms
Taşınabilir eklenti8206,7 ms181,2 ms

Dört düzende de oyun durumu özeti aynı kaldı. Bu ölçümün kendi çalışma payı 1 işçili düzende 10 ms, 8 işçili düzende 5 ms olarak belirlenmişti; bu paylara yüzde 5 ölçüm toleransı uygulanıyordu. Dört sonuç da ölçümün bu payını aştı. Bu sayılar yalnız ağır senaryonun ölçüm koşuludur; oyunun genel hedefi ya da bütün bir oyun gününün tavanı değildir. En büyük ölçülen parça, modun her gün bütün nüfus gruplarını değiştirdiği işti: 149–181 ms. Günün kalanında 0,7–75 ms arasında, ayrıca parçalara ayrılmamış süre vardı; bu yüzden bütün farkı tek bir işleme bağlamıyoruz. Taşınabilir eklentide 8 işçiye geçince toplam süre 254,8 ms’den 206,7 ms’ye düştü; buna karşın pazar hesabı 3,6 ms’den 18,9 ms’ye çıktı. Aynı yükte toplam ve tek tek işlerin farklı yönde değişebilmesi, yalnız işçi sayısına bakarak sonuç çıkaramayacağımızı gösteriyor.

Senaryo, her grubu her gün işleyerek özellikle ağır kurulmuştu; bir oyun yalnız değişim zamanı gelen grupları işlerse sonuç farklı olabilir. İlk ölçüm 29 Ekim 2026 tarihli kayıtta yer alıyor. Ardından nüfus ve paralel çalışma yollarında iyileştirmeler yapıldı, ancak 30 Ekim itibarıyla aynı büyük ölçek denemesi yeniden yapılmamıştı. Bu yüzden ilk tablo iyileştirmelerden sonraki durumu veya güncel genel performansı göstermez.

Turuncu çerçeve içindeki test alanı, çevresindeki daha büyük ve ölçülmemiş kampanya haritasından ayrılıyor

Neden böyle seçtik?

Bu ölçüm, modların verdiği işi ne kadar taşıyabildiğimizi görmek için ağır bir ilk sınamaydı; başarı ilanı değildi. Nüfus işlemlerinin büyük pay kapladığını gösterdi, fakat her grubu her gün değiştirmenin bir oyun için anlamlı olup olmadığını söylemedi. Sonucu açıkça aktarıp, iyileştirmeleri aynı büyük yükte yeniden ölçmeden “tamamlandı” dememek daha doğru.

Bedeli ne?

Ortak nüfus ve ekonomi hesapları oyun kurallarını motora taşımaz; her oyun kendi oranlarını ve içerik kararlarını vermeye devam eder. Buradaki süreler, her nüfus grubunu her gün işleyen bu ağır mod senaryosuna aittir.

Sırada ne var?

Aynı büyük ölçek senaryosunu sonraki mod çalıştırma düzeniyle yeniden ölçmek ve nüfus işlemlerini birikim-eşik yaklaşımını kullanan oyun davranışıyla ayrıca sınamak gerekiyor. Ancak bu iki koşuldan sonuç aldıktan sonra hangi iş yükünün kabul edilebilir olduğunu değerlendirebiliriz.

Sık sorulanlar

Bu ölçümler tam bir oyun gününü mü gösteriyor?

Hayır. Bunlar 2 milyon grubu her gün işleyen mod senaryosunun ölçümleridir; bir oyunun bütün günlük simülasyonunu temsil etmez.

Motor nüfus oranlarını veya pazar fiyatlarını mı seçiyor?

Hayır. Oranlar, mallar, alım-satım davranışı ve üretim öncelikleri oyuna aittir. Motor, modun ve oyunun verdiği kurallarla hesap yapar.

Sonraki iyileştirmeler bu sonucu değiştirdi mi?

Bu tabloda yalnız ilk ölçüm var; sonraki durumla karşılaştırma verisi yok.

Taşınabilir eklentide daha fazla işçi sonucu hızlandırdı mı?

Toplam ölçülen süre 254,8 ms’den 206,7 ms’ye düştü; ancak pazar hesabı 3,6 ms’den 18,9 ms’ye çıktı. Bu nedenle yalnızca toplam süreye ya da tek bir işe bakmak yeterli değil; sonuç bu test düzenine aittir.

Mod desteğinin temelini Geliştirici Günlüğü #8 yazısında bulabilir; MKA Engine, geliştirici günlükleri ve iletişim sayfalarını ziyaret edebilirsiniz.

Kaynaklar ve ilgili belgeler

Bunlar da ilginizi çekebilir