Mantıksal Bir Yardım ( YAZILIM)
-
for(int a=0;i<100(Sınırı yok artık ne yazarsam ) ;i++)
{
myFunction();
}
public void MyFunction()
{
Thread thread=new Thread(new Runnable
{
public void run()
{
/işlem
}
});
Bu kodu çalıştırınca 100 Adet Thread çalışacak arkada . Yaptığım işlemler Daha hızlı çalışacak fakat 100 Thread de Makinayı yoracak yada Program hata verir mi ? Yani bu şekilde yazdığım program sizde mantıklımıdır ?
Yani ben yapılan işlemleri Thread olarak parçalayarak parça parça işlem yapmak istiyorum bu parçalarda bir hayli fazla olabilir yani 100 de olabilir 10 da olabilir. Bu kod mu daha iyi bir koddur yoksa alttaki mi ?
Nedenlerini de öğrenebilir miyim :(
myFunction();
public void MyFunction()
{
Thread thread=new Thread(new Runnable
{
public void run()
{
for(int i=0;i<100;i+)
{
/işlem
}
});
Konu yanlış yere Açılmış ise Lütfen uygun bölüme taşır mısınız Mod abilerim
-
Once execution time'a bakarak performans denemesi yapabilirsiniz.O makine icin en uygun thread sayisini bulun once.
-
-
@dyrnade Aslında Onu bilsem arkada çalışan Thread sayısına göre işlem yaptırabilirim Mesela Makina 10 Threadi kaldırıyorsa 7 Thread arkada çalışırken 1 adet bittiği anda bir diğeri başlasın gibisinden bi işlem yaptırabilirim fakat Makinanın kaç thread çalıştıracağını nasıl bulabilirim ?
@rakkoc Abi o Thread pool ve normal Thread arasındaki farkı çok araştırmıştım fakat istediğim bu değil sanırım Çünkü bazı durumlarda Pool gerkli iken bazı durumlarda Normal Thread de iş görüyor . Yada ben sizin dediğinizi anlamadım :/
-
Eğer CPU gerektiren bir iş ise genelde çekirdek sayısı * 2 optimum değer oluyor. Threadlerin içinde ne yapmak istediğin önemli ama genelde pool kullanmak daha faydalıdır çünkü thread açıp kapamak pahalı bi işlem, genelde açarsın 16 tane falan pool'a gönderirsin yaptırmak istediğin işleri devamlı o da o an hangi thread boş ise ona göre karar verip o thread altında çalıştırır.
IO işi çok yapıyorsan daha fazla thread'e ihtiyacın olabilir belki, ExecutorService aracılığı ile oluşturduğun pool'a maximum thread sayısı verip (100 gibi) gerektiğinde genişleyecek veya daralacak pool da oluşturabilirsin sana kalmış. Executors classının altındaki static metodlara bakabilirsin javadoc'larını okuyarak karar verirsin hangisini kullanacağına. -
@Buremba Threadlerin içerisinde Minimum 40000^30000 işlem var yani For döngüsü içerisinde işlem
Sanırım Pool kullanmak mantıklı çünkü Threadeler çok uzun Pc çöker Pool kullanmak ve Thread sayısını azaltmak yani zaman uzun işlem yavaş olsun Aksini kaldıracağını düşünmüyorum Yada Sunucuya Sağlam bi para gömülecez
-
Amaç ?
-
MhmdAlmz bunu yazdı
@Buremba Threadlerin içerisinde Minimum 40000^30000 işlem var yani For döngüsü içerisinde işlem
Sanırım Pool kullanmak mantıklı çünkü Threadeler çok uzun Pc çöker Pool kullanmak ve Thread sayısını azaltmak yani zaman uzun işlem yavaş olsun Aksini kaldıracağını düşünmüyorum Yada Sunucuya Sağlam bi para gömülecez
thread'lerde çalıştıracağın task'lardan bir sonuç bekliyor musun? (pi sayısının şu kadar hanesini hesapla döndür gibi mi yoksa atıyorum şu dosyaları oluştur şunları taşı gibi mi) ve çalıştıracağın bir task uzun sürüyor mu? thread'leri oluşturmak genel olarak pahalı bir işlem ve zaten işletim sisteminin file descriptor limiti runtime'daki thread sayısını da sınırlıyor. aynı anda 100'lerce thread'e hiçbir zaman ihtiyacın olmaz. -
@buremba yaklaşık bi 2-3 bin defa Post atıyor Thread
@ozgunlu birsürü User var . Bunların içerisinde aranan useri bulup post etmek. amacım
-
MhmdAlmz bunu yazdı
@buremba yaklaşık bi 2-3 bin defa Post atıyor Thread
@ozgunlu birsürü User var . Bunların içerisinde aranan useri bulup post etmek. amacım
eğer http post request'inden bahsediyorsan onu thread içinde sync olarak yapmaktansa async http kütüphanelerinden birini kullanabilirsin onlar hem daha kolay olur hem de daha hızlı çalışır. sonra tek thread'den callback'lerle işini çözersin. -
The Art of Multiprocessor Programming
Concurrency Foundations and Algorithms diye bir ders aldim hocam java da.. ustteki kitabi referans olarak kullandik. Bunu okumani tavsiye ederim. Programlamaya bakis acini degistirecek turde bir kitap. Bir cok kisi multi threading i birden fazla thread yarat olsun bitsin mantigi ile goruyor ama hesaba katman onlarca sey oluyor en basitinden mutual ex. nedir racial condition nedir, volatile neden kullanilir$ lockerlar nelerdir ne zaman kullanilir v.s. Bunlarin hepsini bu kitap ile iyi sekilde ogrenebilirsin.
pdf i mevcut internette bulamazsan ben yollarim