Uygulama tasarımında iş mantıklarını küçük parçalara bölüyoruz. Modüller, DLL / OCX dosyaları ve daha sonra da bunları çalıştıran thread birimleri var.
Thread kullanmak çoklu CPU ortamında anlamlı olabilir. Bir işi beklerken diğer taraftan diğer işlemleri de işlemek zamanı kısaltan çözüm yollarından biridir.
Ancak bazı durumlarda, performans yine de etkin şekilde düşünülmemiş olabilir. Eğer bir method içinde;
doIt1();
doIt2();
gibi uzun süren ve birbirlerinden bağımsız 2 ayrı işlem varsa, her ne kadar bir thread içinde de çalıştırılsa da bu işlem yine de etkin olmayabilir!
Yeni çıkan system.threading genişletmesi ile bu satırları paralel çalıştırmak anlamlı ve kolay olacaktır.
Parallel.Do
yöntemiyle, paralel çalıştırılacak yöntemler bu yöntemin içine dizi olarak eklenir ve çalıştırılır. Sonuç olarak bir thread tekrar farklı thread'lere parçalanacak ve sonra tekrar birleşecektir.
Örnek olarak;
doIt1 --> Maliyet muhasebesinde tüm giriş hareketlerinin hesaplandığı alan ise,
doIt2 --> Maliyet muhasebesinde tüm çıkış hareketlerinin hesaplandığı alan ise
ve bunların içinde yer alan hesaplamalar birbirlerini beklemiyor ve/veya ilişkili değilse, bu yöntem rahatlıkla kullanılabilir ve dual-core teknolojilerinde işlem gücü %100 olsa bile eski yöntemlerle çift çekirdekli işlemcilerde bu %50 görünecektir ancak yeni yöntem ile artık tüm işlemcinin gücü rahatlıkla kullanılabilir.
Peki mevcut kodlarla nasıl yapılır?
Thread kullanmak çoklu CPU ortamında anlamlı olabilir. Bir işi beklerken diğer taraftan diğer işlemleri de işlemek zamanı kısaltan çözüm yollarından biridir.
Ancak bazı durumlarda, performans yine de etkin şekilde düşünülmemiş olabilir. Eğer bir method içinde;
doIt1();
doIt2();
gibi uzun süren ve birbirlerinden bağımsız 2 ayrı işlem varsa, her ne kadar bir thread içinde de çalıştırılsa da bu işlem yine de etkin olmayabilir!
Yeni çıkan system.threading genişletmesi ile bu satırları paralel çalıştırmak anlamlı ve kolay olacaktır.
Parallel.Do
yöntemiyle, paralel çalıştırılacak yöntemler bu yöntemin içine dizi olarak eklenir ve çalıştırılır. Sonuç olarak bir thread tekrar farklı thread'lere parçalanacak ve sonra tekrar birleşecektir.
Örnek olarak;
doIt1 --> Maliyet muhasebesinde tüm giriş hareketlerinin hesaplandığı alan ise,
doIt2 --> Maliyet muhasebesinde tüm çıkış hareketlerinin hesaplandığı alan ise
ve bunların içinde yer alan hesaplamalar birbirlerini beklemiyor ve/veya ilişkili değilse, bu yöntem rahatlıkla kullanılabilir ve dual-core teknolojilerinde işlem gücü %100 olsa bile eski yöntemlerle çift çekirdekli işlemcilerde bu %50 görünecektir ancak yeni yöntem ile artık tüm işlemcinin gücü rahatlıkla kullanılabilir.
Peki mevcut kodlarla nasıl yapılır?
- Thread pooling ayarlanmalı
- Thread manager ile havuzda yer alan thread nesneleri yönetilmeli
- Paralel işlemler birleştirilmeli
- Her paralel işlemden doğabilecek istisnalar (exception) kontrol edilmeli
- Döngüler varsa (toplama, çıkarma gibi array işlemleri) parçalanmalı
- vb.
- vb.
Bunları tekrar yazmak mı? yoksa Parallel CTP Aralık 2007 kullanmak mı?
Tercih her zaman olduğu gibi tasarımcının...