Multi-thread’in nesi zor?


Aslında multi-thread uygulama yazmak, günümüzdeki dillerle hayli kolaylaşmış durumda. .Net’te altyapıyı kullanırken bazı durumlarda multi-threadden zaten yararlanıyorsunuz. Mesela ASP.NET yazıyorsanız, IIS’in çalışma yapısı sayesinde, ziyaretçileriniz threadlere dağılıyor. Kendi kodlarınızı multi-thread yapmanız gereken zamanlarda da kullanabileceğiniz çok iyi mekanizmalar oluşturulmuş durumda. İşin zorluğu, multi-threadin uygulanmasında değil, doğru ve performanslı uygulanmasında. Bunun için de iyi analiz ve tasarım gerekiyor.

Öncelikle uygulamanızı baştan multi-thread yazmanız çoğu durumda gereksiz. Performansla ilgili pek çok konuda yapılması gerektiği gibi, uygulamanızı önce normal yazıp, analizini yapıp, en fazla zaman geçirdiği kısımları performans açısından iyileştirmeniz yeterli. Bunu söylerken tabii ki genel geçer performans ilkelerine dikkat etmeyin demiyorum. Sonradan iyileştirmek, daha özel performans ayarları için (multi-threading gibi) geçerli. (Daha detaylı bilgi için bakınız: Code Complete Second Edition, Steve McConnell, Chapter 25 Code-Tuning Strategies, Chapter 26 Code-Tuning Techniques.)

Uygulamanızın belki yüzde 80’i multi-thread’den yararlanabilir. Ama tüm uygulamanızın işlemci zamanının yüzde 80’i uygulamanızın sadece yüzde 20’sinde geçiyorsa, sadece bu yüzde 20’lik kısmı multi-thread yapmanız büyük olasılıkla yeterli olacaktır.

Peki niye yapmışken kalan yüzde 60’ı da multi-thread yapmayalım? Çünkü herşeyin bir bedeli var. Kod yazma anlamında uygulaması çok kolay olsa da, multi-thread kodun doğruluk ve performansla ilgili sıkıntıları olabiliyor.

Doğruluk ve performansla ilgili oluşabilecek sıkıntının kaynağı, ortak veri üzerinde birden fazla threadin işlem yapmasından kaynaklanıyor. Nasıl veritabanlarında eş zamanlı kullanımın trafiğini iyi yönetemezseniz kördüğümler ve bekleten kilitler oluşursa, threadleriniz de kördüğümlere takılabiliyor ya da birbirlerini bekletebiliyorlar. Daha da kötüsü, tamamen kuralsız bir şekilde hızlı giden thread verilerde istediği değişikliği yaparsa, uygulamanız yanlış çalışabiliyor.

Üstelik multi-thread çalışan kodun test ve debug edilmesi de normal koddan daha zor.

Dimyat’taki pirince giderken evdeki bulgurdan olmak derler ya… İyi planlamazsanız, bilgi birikiminizde ya da çalışacak olan kodun profilini tanımada eksikleriniz varsa, debug iyi yapamıyorsanız, normalde doğru ve belirli bir performansta çalışan kodunuz, yanlış çalışır hale gelebilir ya da beklediğiniz performans getirisinin çok altında kalabilir.

Kolay gelsin : )

Bu yazı Genel içinde yayınlandı ve olarak etiketlendi. Kalıcı bağlantıyı yer imlerinize ekleyin.

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Google fotoğrafı

Google hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap /  Değiştir )

Connecting to %s