Şimdi Ara

Java'ya Yeni Başlayanlar İçin Yardımlaşma Merkezi

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
1 Misafir - 1 Masaüstü
5 sn
87
Cevap
5
Favori
4.465
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 12345
Sayfaya Git
Git
sonraki
Giriş
Mesaj
  • Evet javaya başlayanlar yada başlamış olanlar için yardımlaşma merkezi :)

    Algoritmanız bol olsun :)

    Edit: eski başlık "Java için ortaklar" idi.



    < Bu mesaj bu kişi tarafından değiştirildi haibbi -- 29 Haziran 2013; 22:51:45 >



  • Ben
  • quote:

    Orijinalden alıntı: PhotoJava

    Ben
    bende
  • Arkadaslar basit veya zor sormaktan çekinmeyin soralım paylaşım olsun zihnimizi de taze tutmuş oluruz
  • quote:

    Orijinalden alıntı: mertkansimsek

    Arkadaslar basit veya zor sormaktan çekinmeyin soralım paylaşım olsun zihnimizi de taze tutmuş oluruz
    İlk soruları sormuş olayım o zaman(sorular birbirinden bağımsızdır).

    1)Java içinde sql veritabanına erişebiliyorum ama veri tabanı kurmak için sadece java kullanabilir miyim?


    2)Diyelimki 512 adet thread var ve hepsinin birbiriyle anlaşması gerek yani hepsi aynı işlemleri yapıyorlar ama işlemlerini bitirdiklerinde haber vermeleri gerek. Aşağıdakilerden hangisi daha hızlı ve güvenilir olur?

    a)synchronized(ortakHedef){ortakHedef.tamamlandi[this.index]=true;} -------> 512 adet thread tarafından erişilen 513. thread ve index adlı boolean dizisinde sırayla hangi thread işlemini bitirmiş anlaşılıyor.
    b)static boolean tamamlandi; ---> her thread içinde var olan bir gösterge ve ana program tarafından kontrol edilir.
    c)lock nasıl kullanılır tam bilmiyorum, daha iyiyse anlatır mısınız?

    3)Javada nasıl __asm inline programcığı kullanabiliriz? Kullanabilir miyiz? C++ da böyle birşey var mesela __asm {mov ax,dx} gibi... ya da intrinsic komutları var. Javada bunlar yok mu? İlla x87 mi gerek? Opencl kullanabiliyorum ama küçük kodlar için gereksiz derecede uzun ve yavaş.


    Teşekkürler.

    Cevaplanamayan ama ilerde cevaplanabilecek sorular ilk mesajda kopya olarak tutulursa daha kolay bulunurlar haksız mıyım?



    < Bu mesaj bu kişi tarafından değiştirildi Tugrul_512bit -- 30 Haziran 2013; 17:09:41 >




  • quote:

    Orijinalden alıntı: Tugrul_512bit

    İlk soruları sormuş olayım o zaman(sorular birbirinden bağımsızdır).

    1)Java içinde sql veritabanına erişebiliyorum ama veri tabanı kurmak için sadece java kullanabilir miyim?


    2)Diyelimki 512 adet thread var ve hepsinin birbiriyle anlaşması gerek yani hepsi aynı işlemleri yapıyorlar ama işlemlerini bitirdiklerinde haber vermeleri gerek. Aşağıdakilerden hangisi daha hızlı ve güvenilir olur?

    a)synchronized(ortakHedef){ortakHedef.tamamlandi[this.index]=true;} -------> 512 adet thread tarafından erişilen 513. thread ve index adlı boolean dizisinde sırayla hangi thread işlemini bitirmiş anlaşılıyor.
    b)static boolean tamamlandi; ---> her thread içinde var olan bir gösterge ve ana program tarafından kontrol edilir.
    c)lock nasıl kullanılır tam bilmiyorum, daha iyiyse anlatır mısınız?

    3)Javada nasıl __asm inline programcığı kullanabiliriz? Kullanabilir miyiz? C++ da böyle birşey var mesela __asm {mov ax,dx} gibi... ya da intrinsic komutları var. Javada bunlar yok mu? İlla x87 mi gerek? Opencl kullanabiliyorum ama küçük kodlar için gereksiz derecede uzun ve yavaş.


    Teşekkürler.

    Cevaplanamayan ama ilerde cevaplanabilecek sorular ilk mesajda kopya olarak tutulursa daha kolay bulunurlar haksız mıyım?

    Alıntıları Göster
    @Tugrul_512bit

    Hepsi aynı işi yapıyorsa 512 thread gereksiz yere kasar. Sistemdeki çekirdek sayısını alıp thread leri dinamik olarak oluşturursan çok daha verimli olur. Mesela 2 fiziksel 2 sanal toplam 4 çekirdek olduğunu saptadın. 4 thread buraya, 5. si ise bunlara iş dağıtımı yapar. Paralel thraedlerin iş istediği metodu senkronize edersin. İş parçacıkları bittiğinde 5. thread wait ile bunları bekler, hepsi gelince o da sonlanır.

    Javada asm olmaz. Java bytecode sistemden bağımsız. Sistem bağımsız olan kodun içine sistem bağımlı kod ekleyemezsin. İstediklerin javaya pek uygun değil gibi geldi bana. C++ biliyorsan bence onunla devam et.



    < Bu mesaj bu kişi tarafından değiştirildi Guest-BF8E9B238 -- 30 Haziran 2013; 21:34:11 >




  • quote:

    Orijinalden alıntı: elektro_gadget

    @Tugrul_512bit

    Hepsi aynı işi yapıyorsa 512 thread gereksiz yere kasar. Sistemdeki çekirdek sayısını alıp thread leri dinamik olarak oluşturursan çok daha verimli olur. Mesela 2 fiziksel 2 sanal toplam 4 çekirdek olduğunu saptadın. 4 thread buraya, 5. si ise bunlara iş dağıtımı yapar. Paralel thraedlerin iş istediği metodu senkronize edersin. İş parçacıkları bittiğinde 5. thread wait ile bunları bekler, hepsi gelince o da sonlanır.

    Javada asm olmaz. Java bytecode sistemden bağımsız. Sistem bağımsız olan kodun içine sistem bağımlı kod ekleyemezsin. İstediklerin javaya pek uygun değil gibi geldi bana. C++ biliyorsan bence onunla devam et.



    Ama threadlerden her biri binlerce işlem yapıyor işleme başlamadan önce binlerce elemanlık dizi ayırıyor yani hazır yaratılmış dizileriyle uğraşmak daha kolay olur mu merak etmiştim.




  • quote:

    Orijinalden alıntı: Tugrul_512bit

    Ama threadlerden her biri binlerce işlem yapıyor işleme başlamadan önce binlerce elemanlık dizi ayırıyor yani hazır yaratılmış dizileriyle uğraşmak daha kolay olur mu merak etmiştim.

    Ben sana doğrusunu söyleyeyim de sen ne yaparsan yap. İsterse milyonlarca işlem olsun. İş yükünü thread sayısına böler hepsine dağıtırsın. Thread sayısı mümkün olduğu kadar az olmalı. O thread ler bedava değil, herbiri için sürekli bağlam değişimi yapılıyor. Donanımı bol keseden harcarsan ciddi projelerde sıkıntı çekersin.
  • Tugrul_512bit kullanıcısına yanıt
    2. Java 5 versiyonu ile beraber executors desteği getirdi. oracle üzerinde gereksiz karmaşık dökümanı var bakmak isterseniz. Burada ise vogel reyizin kısa bir yazısı var giriş için. Thread yönetimini manuel olarak yapmaktansa uygun thread pool yaratarak yönetimini javaya bırakmak daha mantıklı.

    Multithreading iki yüzü keskin kılıç gibidir, temellerini öğrenmeden kullanmaya kalkmak tehlikeli olabilir. Thread sayısını mümkün olduğu kadar az tutmaya çalışmak ise her koşul/amaç için geçerli bir yaklaşım değil. Tamami ile sistemin amaç ve ihtiyaçları doğrultusunda değişebilir. multithreading her senaryo için aynı şekilde uygulanamaz, hazır giyimden ziyade terzi dikimi olmak zorundadır. Doğal olarak bu terzi dikimine uygun kumaş ( donanım ) kullanmak gerekir.
    Örnek vermek gerekirse veritabanı işlemleri genelde ( parallel/dağıtık sorgulama - select - yapılabilir kimi sistemlerde ) tek thread üzerinden yapılır ki tutarlılık sağlanabilsin ( table/row lock ). Bu yüzden tek threadin çalışacağı varsayılarak tek corelu makineler kullanılabilir ( örneğin mongo shard larında birden fazla core gereksizdir genelde )
    Buna karşılık web üzerinde hizmet verecek uygulama sunucusunun çalışacağı ve üzerinde çalıştıracağı uygulamalara birden fazla kullanıcı istekte bulunup iş yaptırabilir. Bu gibi durumlarda doğal olarak multithreadinge ihtiyaç duyulacaktır. Bunun için kullanılacak donanım da buna uygun olmalıdır. Örnek olarak sun'ın t2 işlemcileri 8 core ve her core üzerinde 8 thread çalıştırarak tek işlemcide 64 thread çalıştırabiliyordu hatırladığım kadarı ile ( 2007 de falan çıkmıştı, belki şimdi daha da gelişmiştir ) böyle bir donanım üzerinde uygulama sunucusu çalıştırmak daha mantıklı olacaktır.




  • quote:

    Orijinalden alıntı: bestanealtcizgi

    2. Java 5 versiyonu ile beraber executors desteği getirdi. oracle üzerinde gereksiz karmaşık dökümanı var bakmak isterseniz. Burada ise vogel reyizin kısa bir yazısı var giriş için. Thread yönetimini manuel olarak yapmaktansa uygun thread pool yaratarak yönetimini javaya bırakmak daha mantıklı.

    Multithreading iki yüzü keskin kılıç gibidir, temellerini öğrenmeden kullanmaya kalkmak tehlikeli olabilir. Thread sayısını mümkün olduğu kadar az tutmaya çalışmak ise her koşul/amaç için geçerli bir yaklaşım değil. Tamami ile sistemin amaç ve ihtiyaçları doğrultusunda değişebilir. multithreading her senaryo için aynı şekilde uygulanamaz, hazır giyimden ziyade terzi dikimi olmak zorundadır. Doğal olarak bu terzi dikimine uygun kumaş ( donanım ) kullanmak gerekir.
    Örnek vermek gerekirse veritabanı işlemleri genelde ( parallel/dağıtık sorgulama - select - yapılabilir kimi sistemlerde ) tek thread üzerinden yapılır ki tutarlılık sağlanabilsin ( table/row lock ). Bu yüzden tek threadin çalışacağı varsayılarak tek corelu makineler kullanılabilir ( örneğin mongo shard larında birden fazla core gereksizdir genelde )
    Buna karşılık web üzerinde hizmet verecek uygulama sunucusunun çalışacağı ve üzerinde çalıştıracağı uygulamalara birden fazla kullanıcı istekte bulunup iş yaptırabilir. Bu gibi durumlarda doğal olarak multithreadinge ihtiyaç duyulacaktır. Bunun için kullanılacak donanım da buna uygun olmalıdır. Örnek olarak sun'ın t2 işlemcileri 8 core ve her core üzerinde 8 thread çalıştırarak tek işlemcide 64 thread çalıştırabiliyordu hatırladığım kadarı ile ( 2007 de falan çıkmıştı, belki şimdi daha da gelişmiştir ) böyle bir donanım üzerinde uygulama sunucusu çalıştırmak daha mantıklı olacaktır.

    Yani ilk önce Runnable için o anki kullanılabilecek thread sayısını sorgulatıp sonra ona göre thread sayısını ayarlayıp bunu executor içine mi aktarmalıyım?




  • quote:

    Orijinalden alıntı: Tugrul_512bit

    quote:

    Orijinalden alıntı: bestanealtcizgi

    2. Java 5 versiyonu ile beraber executors desteği getirdi. oracle üzerinde gereksiz karmaşık dökümanı var bakmak isterseniz. Burada ise vogel reyizin kısa bir yazısı var giriş için. Thread yönetimini manuel olarak yapmaktansa uygun thread pool yaratarak yönetimini javaya bırakmak daha mantıklı.

    Multithreading iki yüzü keskin kılıç gibidir, temellerini öğrenmeden kullanmaya kalkmak tehlikeli olabilir. Thread sayısını mümkün olduğu kadar az tutmaya çalışmak ise her koşul/amaç için geçerli bir yaklaşım değil. Tamami ile sistemin amaç ve ihtiyaçları doğrultusunda değişebilir. multithreading her senaryo için aynı şekilde uygulanamaz, hazır giyimden ziyade terzi dikimi olmak zorundadır. Doğal olarak bu terzi dikimine uygun kumaş ( donanım ) kullanmak gerekir.
    Örnek vermek gerekirse veritabanı işlemleri genelde ( parallel/dağıtık sorgulama - select - yapılabilir kimi sistemlerde ) tek thread üzerinden yapılır ki tutarlılık sağlanabilsin ( table/row lock ). Bu yüzden tek threadin çalışacağı varsayılarak tek corelu makineler kullanılabilir ( örneğin mongo shard larında birden fazla core gereksizdir genelde )
    Buna karşılık web üzerinde hizmet verecek uygulama sunucusunun çalışacağı ve üzerinde çalıştıracağı uygulamalara birden fazla kullanıcı istekte bulunup iş yaptırabilir. Bu gibi durumlarda doğal olarak multithreadinge ihtiyaç duyulacaktır. Bunun için kullanılacak donanım da buna uygun olmalıdır. Örnek olarak sun'ın t2 işlemcileri 8 core ve her core üzerinde 8 thread çalıştırarak tek işlemcide 64 thread çalıştırabiliyordu hatırladığım kadarı ile ( 2007 de falan çıkmıştı, belki şimdi daha da gelişmiştir ) böyle bir donanım üzerinde uygulama sunucusu çalıştırmak daha mantıklı olacaktır.

    Yani ilk önce Runnable için o anki kullanılabilecek thread sayısını sorgulatıp sonra ona göre thread sayısını ayarlayıp bunu executor içine mi aktarmalıyım?

    Hayır. Threadlerinizi nasıl bir mantık ile çalıştırmak istiyorsanız ona uygun bir executor yaratıp ( mevcut değilse kendiniz de implemente edebilirsiniz tabii ) threadlerinizi bu exucotora verirsiniz o uygun şekilde çalıştırır.
    Yolladığım linke bakarsanız basit örnekler var, kendiniz de araştırıp okuyabilirsiniz.




  • quote:

    Orijinalden alıntı: bestanealtcizgi

    quote:

    Orijinalden alıntı: Tugrul_512bit

    quote:

    Orijinalden alıntı: bestanealtcizgi

    2. Java 5 versiyonu ile beraber executors desteği getirdi. oracle üzerinde gereksiz karmaşık dökümanı var bakmak isterseniz. Burada ise vogel reyizin kısa bir yazısı var giriş için. Thread yönetimini manuel olarak yapmaktansa uygun thread pool yaratarak yönetimini javaya bırakmak daha mantıklı.

    Multithreading iki yüzü keskin kılıç gibidir, temellerini öğrenmeden kullanmaya kalkmak tehlikeli olabilir. Thread sayısını mümkün olduğu kadar az tutmaya çalışmak ise her koşul/amaç için geçerli bir yaklaşım değil. Tamami ile sistemin amaç ve ihtiyaçları doğrultusunda değişebilir. multithreading her senaryo için aynı şekilde uygulanamaz, hazır giyimden ziyade terzi dikimi olmak zorundadır. Doğal olarak bu terzi dikimine uygun kumaş ( donanım ) kullanmak gerekir.
    Örnek vermek gerekirse veritabanı işlemleri genelde ( parallel/dağıtık sorgulama - select - yapılabilir kimi sistemlerde ) tek thread üzerinden yapılır ki tutarlılık sağlanabilsin ( table/row lock ). Bu yüzden tek threadin çalışacağı varsayılarak tek corelu makineler kullanılabilir ( örneğin mongo shard larında birden fazla core gereksizdir genelde )
    Buna karşılık web üzerinde hizmet verecek uygulama sunucusunun çalışacağı ve üzerinde çalıştıracağı uygulamalara birden fazla kullanıcı istekte bulunup iş yaptırabilir. Bu gibi durumlarda doğal olarak multithreadinge ihtiyaç duyulacaktır. Bunun için kullanılacak donanım da buna uygun olmalıdır. Örnek olarak sun'ın t2 işlemcileri 8 core ve her core üzerinde 8 thread çalıştırarak tek işlemcide 64 thread çalıştırabiliyordu hatırladığım kadarı ile ( 2007 de falan çıkmıştı, belki şimdi daha da gelişmiştir ) böyle bir donanım üzerinde uygulama sunucusu çalıştırmak daha mantıklı olacaktır.

    Yani ilk önce Runnable için o anki kullanılabilecek thread sayısını sorgulatıp sonra ona göre thread sayısını ayarlayıp bunu executor içine mi aktarmalıyım?

    Hayır. Threadlerinizi nasıl bir mantık ile çalıştırmak istiyorsanız ona uygun bir executor yaratıp ( mevcut değilse kendiniz de implemente edebilirsiniz tabii ) threadlerinizi bu exucotora verirsiniz o uygun şekilde çalıştırır.
    Yolladığım linke bakarsanız basit örnekler var, kendiniz de araştırıp okuyabilirsiniz.

    Alıntıları Göster
    public static void SelectionSirala(int x []){ 

    for(int u = 0; u < x.length ; u++){

    for(int f = 0; f < x.length - 1 ; f++){
    if(x[f] > x[f+1]){
    int min = x[f+1];
    x[f+1] = x[f];
    x[f] = min;

    }

    }
    }
    bu BubbleSort mu SelectionSort mu nedir ben yazdım gayet güzel sıralıyor :)




  • quote:

    Orijinalden alıntı: TheApproachingCurve

    public static void SelectionSirala(int x []){ 

    for(int u = 0; u < x.length ; u++){

    for(int f = 0; f < x.length - 1 ; f++){
    if(x[f] > x[f+1]){
    int min = x[f+1];
    x[f+1] = x[f];
    x[f] = min;

    }

    }
    }
    bu BubbleSort mu SelectionSort mu nedir ben yazdım gayet güzel sıralıyor :)

    galiba bu iki sıralamayı da programlama öğretirken mantığını göstermek için öğretiyorlar, yoksa ikisi de birbirinden hantal algoritmalar.
  • quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: TheApproachingCurve

    public static void SelectionSirala(int x []){ 

    for(int u = 0; u < x.length ; u++){

    for(int f = 0; f < x.length - 1 ; f++){
    if(x[f] > x[f+1]){
    int min = x[f+1];
    x[f+1] = x[f];
    x[f] = min;

    }

    }
    }
    bu BubbleSort mu SelectionSort mu nedir ben yazdım gayet güzel sıralıyor :)

    galiba bu iki sıralamayı da programlama öğretirken mantığını göstermek için öğretiyorlar, yoksa ikisi de birbirinden hantal algoritmalar.

    varsa daha hızlıları paylaşalım :D




  • quote:

    Orijinalden alıntı: TheApproachingCurve

    quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: TheApproachingCurve

    public static void SelectionSirala(int x []){ 

    for(int u = 0; u < x.length ; u++){

    for(int f = 0; f < x.length - 1 ; f++){
    if(x[f] > x[f+1]){
    int min = x[f+1];
    x[f+1] = x[f];
    x[f] = min;

    }

    }
    }
    bu BubbleSort mu SelectionSort mu nedir ben yazdım gayet güzel sıralıyor :)

    galiba bu iki sıralamayı da programlama öğretirken mantığını göstermek için öğretiyorlar, yoksa ikisi de birbirinden hantal algoritmalar.

    varsa daha hızlıları paylaşalım :D

    Alıntıları Göster
    Jtextfield içerisindeki veriyi diziye nasıl atıyabilirim teşekkürler :)




  • quote:

    Orijinalden alıntı: TheApproachingCurve

    quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: TheApproachingCurve

    public static void SelectionSirala(int x []){ 

    for(int u = 0; u < x.length ; u++){

    for(int f = 0; f < x.length - 1 ; f++){
    if(x[f] > x[f+1]){
    int min = x[f+1];
    x[f+1] = x[f];
    x[f] = min;

    }

    }
    }
    bu BubbleSort mu SelectionSort mu nedir ben yazdım gayet güzel sıralıyor :)

    galiba bu iki sıralamayı da programlama öğretirken mantığını göstermek için öğretiyorlar, yoksa ikisi de birbirinden hantal algoritmalar.

    varsa daha hızlıları paylaşalım :D

    http://tr.wikipedia.org/wiki/S%C4%B1ralama_algoritmas%C4%B1

    bu sayfadaki görsel canlandırmalar çok güzel :)




  • quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: TheApproachingCurve

    quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: TheApproachingCurve

    public static void SelectionSirala(int x []){ 

    for(int u = 0; u < x.length ; u++){

    for(int f = 0; f < x.length - 1 ; f++){
    if(x[f] > x[f+1]){
    int min = x[f+1];
    x[f+1] = x[f];
    x[f] = min;

    }

    }
    }
    bu BubbleSort mu SelectionSort mu nedir ben yazdım gayet güzel sıralıyor :)

    galiba bu iki sıralamayı da programlama öğretirken mantığını göstermek için öğretiyorlar, yoksa ikisi de birbirinden hantal algoritmalar.

    varsa daha hızlıları paylaşalım :D

    http://tr.wikipedia.org/wiki/S%C4%B1ralama_algoritmas%C4%B1

    bu sayfadaki görsel canlandırmalar çok güzel :)

    Java hazır sıralama metodu varmış zaten,
    Java.util.Arrays Import edilince
    Arrays.sort(array_adi) ; şeklinde kullanılıyormus




  • quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: TheApproachingCurve

    quote:

    Orijinalden alıntı: mertkansimsek

    quote:

    Orijinalden alıntı: TheApproachingCurve

    public static void SelectionSirala(int x []){ 

    for(int u = 0; u < x.length ; u++){

    for(int f = 0; f < x.length - 1 ; f++){
    if(x[f] > x[f+1]){
    int min = x[f+1];
    x[f+1] = x[f];
    x[f] = min;

    }

    }
    }
    bu BubbleSort mu SelectionSort mu nedir ben yazdım gayet güzel sıralıyor :)

    galiba bu iki sıralamayı da programlama öğretirken mantığını göstermek için öğretiyorlar, yoksa ikisi de birbirinden hantal algoritmalar.

    varsa daha hızlıları paylaşalım :D

    http://tr.wikipedia.org/wiki/S%C4%B1ralama_algoritmas%C4%B1

    bu sayfadaki görsel canlandırmalar çok güzel :)

    Java hazır sıralama metodu varmış zaten,
    Java.util.Arrays Import edilince
    Arrays.sort(array_adi) ; şeklinde kullanılıyormus

    Alıntıları Göster
    10GB dosya var diyelim her satırında bir tam sayı olsun, bilgisayarın RAM ise en fazla 32 MB olsun, şimdi bu dosyadaki tamsayıları hangi yöntemle en hızlı şekilde sıralarız?




  • quote:

    Orijinalden alıntı: Tugrul_512bit

    10GB dosya var diyelim her satırında bir tam sayı olsun, bilgisayarın RAM ise en fazla 32 MB olsun, şimdi bu dosyadaki tamsayıları hangi yöntemle en hızlı şekilde sıralarız?

    Alıntıları Göster
    bu en hızlısı mı simdi
  • quote:

    Orijinalden alıntı: TheApproachingCurve

    bu en hızlısı mı simdi

    Adamlar en uygununu koymuslardir sanirim.
  • 
Sayfa: 12345
Sayfaya Git
Git
sonraki
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.