[Çözüldü] Fazla Kod Yazmak

Başlatan berkayaslan, 30 Mart 2014 - 08:47:37

« önceki - sonraki »

0 Üyeler ve 3 Ziyaretçi konuyu incelemekte.

berkayaslan

Program yazarken fazla kod programı yavaşlatır mı?  Bu büyük projelerde sorun olur diyebilirsiniz ama python ile çalıştığım için hıza önem vermem gerekir.  Ayrıca yorum satırları boşluk vs. Programı yavaşlatır mı?  Özellikle açılışından bahsediyorum. 
İf you wanna be the best, You must SMURF something. :)

xavier

Kodun uzadıkça yavaşlaması aslında birden fazla unsura bağlıdır. Eğer bahsettiğiniz kod milyon sayısına varan satırlardan oluşuyorsa, evet biraz yavaşlatır. Ama bu bilgisayar için pek sorun olmaz. Daha çok yazdığınız kodun yapısı önemlidir. Mesela tek proses yapan uygulamalar kısada olsalar multiproses kullanabilen uygulamlardan daha yavaş çalışırlar. Yani yazdığınız uygulama, kendini kopyalayıp, diğer işlemlerini işlemcinin diğer çekirdeklerine dağıtamıyorsa, bunu yapabilen uygulamaya oranla -kısa da olsa- yavaş çalışacaktır.

Yorum satırları ya da boşluklar bilgisayar için bir şey ifade etmez. Python da zaten satır ve girinti kullanmak zorundasınız. 100 satır ya da 1000 satır bilgisayar için pek birşey ifade etmez. Ama bu tip kodlara kaba kod denir. Bilgisayar için hiçbir şey farketmez ama sizin açınızdan kod uzadıkça, akış diyagramı hazırlamak ya da oluşan hataları düzeltmek zorlaşır.

Uygulamanızın hızlı çalışmasını sağlamak için Python'dan ziyade C dilini tercih etmenizi öneririm. Ama geliştirme sürecinin hızlı olmasını istiyorsanız Python daha avantajlıdır.
What would Gordon Freeman do?

sem

Soruya genel yaklaşacağım.

Öncelikle şuradan başlayayım bir uygulamanın yavaşlığı aslında, burada aslında derken pratikte demek istiyorum; ihtiyaç ile alakalıdır. Örneğin bir uygulamayı yazdınız ve kullanıcıya ya da kurumsal bir uygulama ise iş birimine verdiniz. Kullanıcı bu uygulama ile çok büyük bir rapor ihtiyacını karşılıyorsa ve sizin uygulamanız bunu 3 saniyede getirebiliyorsa bunu 2 saniyeye indirmek için uğraşmanız son kullanıcı açısından çok anlamlı olmaz. 3 saniye kendisine yettiği için zaten, performans ile ilgili bir sorunu zaten yoktur. Böyle bir uygulamaya performans açısından zaman harcamanıza gerek yoktur.  Kullanıcı için 3 - 5 saniye kabul edilebilirken bunu 2 saniyeye düşürmeye çalışmak gereksiz  olarak nitelenebilir. Aynı ihtiyacı  2 dakikada karşılayabiliyorsanız evet kodunuza göz gezdirmeniz gerekir eğer yapılan testlerdeki performans kaybı ağ seviyesinde (network) ya da veri tabanı seviyesinde değilse.

Yaptığınız uygulama kritik işlemleri atomik seviyede karşılaması bekleniyorsa 5 saniye yıllar kadar uzun da sayılabilir =) Yine duruma göre kodu incelemek gerekebilir. Yani aslında önce ihtiyacı belirlemek gerekir.

Sonuç olarak performans iyileştirmesine ihtiyacınız olduğunu varsayalım, yukarıdaki şekilde, ihtiyaca göre yavaş kalan bir uygulama ortaya çıktı ve performans iyileştirmesi yapacağız. Burada paralel programlamaya gidilecekse, donanım da önemli olmaya başlıyor siz uygulama olduğu gibi paralel işlem yapan (multi processing) bir hale getirdikten sonra, uygulama tek çekirdekli bir işlemcide çalışacaksa yaptığınız paralelleştirmenin hiç bir anlamı kalmaz.

Yani öncelik olarak bana sorarsanız çok kabaca;

* ihtiyacınız belirleyin; uygulamadan beklentiniz nedir. Bu aşamada bir kod yazmanız gerekmez bu işlemi kağıt kalem ile yapabilirsiniz.
* Daha sonra belirlenen ihtiyaçlara göre, yazacağınız kodu şemalandırın yani akış diyagramını çizin. Bu aşamada da kod yazmanız gerekmez, kağıt kalem ile yapabilirsiniz. Uygulama akışı, kod aşamasından önce belirlenmesi gereken ve koda yön vermesi beklenen bir adımdır.
* İhtiyaçları karşılamak üzere elinizde yapmanız gerekenleri adım adım gösteren bir diyagramınız var şu anda. Bu diyagramı kodlayın. =)

Tabi kod aşamasından önce kodlama birimlerini bilmeniz gerekiyor. Daha hızlı olması açısından farklı bir dile geçmek pratikte pek uygulanan bir yöntem değil aslında. Hele ki C gibi bir dile yönelecekseniz, önce nesne yönelimli mi yoksa yapısal programlama mı yapacağınızın dahi kararını vermeniz gerek çünkü C NYP  (nam-ı diğer OOP) desteklemez. Python da nesnenin tüm özelliklerini karşılamasa da en azından sınıfları vs desteklemektedir.

Performansa böyle bakabiliriz. Sorularınız için ise, yorum satırları, uygulama içerisindeki boşluklar uygulama performansını etkilemez. Tabi boşluğu bir string nesnesine koyarsanız bellekte çok yer tutacağı için dolaylı olarak etkileyebilir. Örneğin;

isiim = "..............SEMETEY......." nokta yerine bir milyon karakter boşluk olursa =) başınız ağrır evet.

Yorum satırları da programcıların kendileri ve diğer programcılar için aldıkları not olarak yorumlanır ve işlemci için hiç bir anlam ifade etmediğinden dolayı uygulama performansını normalde etkilemez. Çünkü yazılan kodlar işlemcinin anlayacağı bir dile çevriliyor ve bu aşamada yorum satırları görmezden gelinir.

Burada benim aklıma takılan sadece şu oluyor =) Özellikle başlangıçta demişsiniz, Python'da anlık olarak işlemci diline çevriliyor yani önceden derlenmeyip anlık olarak yorumlanıyor. Önceden derlenenlerde yukarıda bahsettiğimiz gibi zaten görmezden gelindiği sorun yok. Fakat Python için yorumlama aşamasında hangilerinin kod hangilerinin yorum olduğu ayrıştırılmalı anlamına geliyor. Bu durum ne kadar etkiler test etmek lazım aslında. Test yapana kadar önlem olarak Python kodunu önceden derleyebilirsiniz... .pyc uzantılı dosyalar üretiliyordu yanılmıyorsam bu işlem sonucunda.

Gerçi şu da var, sizinki yorum satırı olsun ya da olmasın, bunu anlık olarak değerlendireceği zaman da mutlaka bir koşul zaten gerekiyor. Bu nedenle muhtemelen etkilmeyecektir başlancıç aşamasında da diye tahmin ediyorum.


satır1
satır2
satır3
...
...
...
...
...
satir1000000


Bunları teker teker okurken zaten yorum satırı olup olmadığına karar vermesi gerekli, uygulamada yorum satırı olsa da karar vermeli, olmasa da karar vermeli, yani programcı tabiri ile bir if e sokmalı bunları =)...

Bu nedenle akademik bir bilgi olmasa da başlangıçta da pek etkileyeceğini düşünmüyorum.
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?

berkayaslan

@sem @xavier

Çok Teşekkür ederim. Sağolun..
İf you wanna be the best, You must SMURF something. :)