Neler yeni

Yeni mesajlar Yeni konular En çok mesaj En çok tepki En çok görüntülenen

C++ ve actionscript ile ilgili dikkatimi çeken bir konu

sevimsli

🌟Usta Tasarımcı🌟
Katılım
5 Ara 2008
Mesajlar
273
Tepkime puanı
8
Geçenlerde actionscripte ek olarak yazdığım hesaplama yoğunluklu görev ile ilgili bir problemle karşılaştım . Yani nümerik kütüphaneler oluştururken performans ve profil oluşturucuları gerekli olduğunu farketmeden tampon server bellek ayarı yaptım .

Bunun sonucunda tek satırlık erişimci fonksiyonumda (X Y::f() { return myX_;} gibi istisnai durumla karşılaştım .

Şimdi yazarak kopyalama (ağır kopyalama) referans sayımı kullanan c++ da yaygın bir optimasyondur . Basitleştirilmiş karakter katarı ile c++ da ele aldığım string sınıflarını action script ile birleştirerek optimasyon tampon bellek server trafik hızı olarak ayarlamalar çekiyorum . Ancak bunun için c++ lazy copy yazarak kopyalama kod yöntemini uygulayıp as kod yapılarıyla oynamak durumunda kalıyorum.

Örneğin :c++ kodu
namespace Orginal
{
class string
{
public :
String(); /Boş başla
-String(); /Tamponu boşalt
String ( const String&); /Tam bir Kopya al ki yer kalsın
void Append (char) ; /Oyun karakteri ekle

................../Kodlar var

private :
char* buf_; /Ayrılan tampon ve hızı
size_t len_; /Tampon uzunluğu (arada sanaldan kurtulma işlemi var)
siz_t used_; /Gerçekten kullanılan karakter sayısına göre performans

Bu durumda çok kullanıcılı as destekli uygulamaya girildiğinde şu sorun karşıma çıkıyor En iyi tampon Büyüme Staratejisi nedir ?

Yani bunun için trafik hızını ayarlamak tampon belleği sanalda büyütüp serverı sanal degil local olarak kandırmak istediğimde elde ettiğim sonucun hangisinin kullanışlı olduğunu bulamıyorum .?

Bu işlemleri gerçekleştirirken Ya Tam büyüme (Yeni Tampon tam olarak o andaki işlem tarafından gerektiği kadar büyük) ya Sabit artışlı büyüme (O andaki işlem miktarından daha büyük) Yada üstel büyüme (İşlemin katsayısı kadar büyüme) sonucu elde ediyorum .

Paylaşılabilir Karakter katarı yazabilmek içinde ekstra çaba sarfediyorum üstel büyümede...

Hangisinin daha kullanışlı olduğunu bana açıklayacak arkadaşların acil yardımılarını bekliyorum...
 
Son düzenleme:

sevimsli

🌟Usta Tasarımcı🌟
Katılım
5 Ara 2008
Mesajlar
273
Tepkime puanı
8
Cevabı buldum

Cevap gene aslında hiçbiri tam bi kaynak sağlamıyo . Yani duruma göre optimasyon yapılacak .

Bir String nesnesi o andaki ayrılmış serverda tampondaki yeri tüketirse , daha büyük bir tampon yer ayırmak zorunda kalıyor. Çünkü as uygulamalarda analiz standart bir vektör gibi ayrılmış loading işlemleri için server trafik hızı ve alan tamponu kullanan diğer yapılar ve konteynerlar için geçerli durumla karşı karşı ya kalıyorum.

Bulduğum sonuç şu yazmış olduğum as uygulamalarında server yer kontrolünü program içerisinde şöle yapmakta karar kıldım.Şimdi server yer ayırmaların sayısı ve uygulama hız sonuç uzunluğunu N olacak bir karakter katarı için belirli bir karakter katarının kopyalanması gereken ortalama sayısı ile alakalı çıkıyo hep...

Bu durumdada Tam büyümede bir karakter eklemek ve ardından bi kararkter daha eklemek , iki ayrı yer ayırmayı server hızını ve loading olayını zorlaştırdı.Bunun ardından önce mevcut karakter , as ve katarı ile ilk yeni karakter için sahip olacak tampon ayarı yaptım. Yer israfı olmadı . Ama bu durumda server hızını ayarlayım derken actionscript içerisindeki kodları assemblyle değiştirdim c++ bana o(N) yer ayırma sağladı serverda , bende en kötü surumda sabit bir çarpanla , As kodun içerisindeki char başına 0(N) kopyalama yaparım dedim . Ama bu seferde string uygulayıcısının denetimi elimden gitti.

Sabit artışlı büyümeyi denedim.Sabit miktar kadar server yer oranını sabit yapınca 64 byte başlayan artış büyüklüğü gördüm. As içerisindeki tüm karakter katarları 64 byte ın katları olarak artmaya başladı . Ama yer israfı oldu çok küçükde olsa ama şu avantajı yakalamış oldum bu seferde Server tampon bellek hız kontrolü uygulamanın artış büyüklüğü ile sınırlandı , karakter katarı yada Kullanıcıların yığılması testi sonucunda değişiklik olmadı.Ama bu seferde ilkinden daha uzun uygulama loadingi gördüm .Yani actionscript içerisindeki katar 0(N) yer ayırma işlemi yaptı ama char başına ortalama 0(N) kopyalama gerçekleştirdi.Ama string katarlarını ve serverdaki trafik hız kontrolünü elime aldım.

Üstel büyümeyi denedim : Yeni serevr tampon bellek ve o andaki kullanım kadar F çarpanı ile büyüttüm serverı kandırıp trafik hzıını .F=.5 için halen 100byte uzunluğunda bir karakter katarı elde edip as üzerinde tüm uygulamalar aşırı derecede hızlandı.her uygulama için ve loading toplamaı 150byte uzunluğunda server yeni bir tampon bellek oluşturdu. 0(logN) yer ayırma ile işi hızlandırdım , as üzerindeki char katarına 0(1) kopyalama yaptırttım . Logaritmasıyla sabit trafik hız kontrolü , iyi performans , ve hissedilmeyecek ölçüde loading işlemleri soktum araya.Buda yer israfı yaptı .Kullanılmayan tampon yeri kaldı .Kalan tampon yeri her zamanda fonksiyonel olarak NxFbyte olarak kaldı değişmedi.Genede israf yaptık uygulamada.

Bunların hepsini denedim. Sonuç şu ki aslında hepsinin avantajı dezavantajı var .Duruma ve istediğin şeye göre değişiyor.Uygulama olarak online çok kullanıcılı oyunlar ile baz aldığımda trafik hızı , server tampon bellek ve uygulama hızını gene her zaman ya 0(N) yer israfı yada hız düşmesi olarak gördüm.Ama farklı bir durrum söz konusu ve ben yanılıyosam onu da açıklayacak arkadaşlara şimdiden teşekkür ederim.
 
Üst