BMS-302 İleri Web Programlama İş Parçacığı (Thread) ve Soket (Socket) Programlama İş Parçacıkları (Threads) • Ana programa paralel çalışan işler oluşturmak için kullanılır • Makine birden fazla çekirdeğe sahipse (multi-core) işler aynı anda çalışabilir • Aksi halde iş parçacıklarının her birine küçük zaman dilimleri verilerek aynı anda çalışıyor izlenimi verilir Tek Çekirdekli Sistemde Eş Zamanlı Çalıştırma Çok-çekirdekli Sistemde Paralel Çalıştırma Tek ve Çok İş Parçacıklı İşlemler İş Parçacıklarının Faydaları • Cevap Verebilirlik (Responsiveness) • Kaynak Paylaşımı (Resource Sharing) • Ekonomi (Economy) • Solaris: thread creation (1/30) ve context switch (1/5) • Ölçeklenebilirlik (Scalability) Çok-çekirdekli Programlama • Çok-çekirdekli sistemlerin ortaya çıkmasıyla, programcılar için çok iş parçacıklı uygulamalar yazma gereği artmıştır • Çok iş parçacıklı uygulamalarle ilgili zorluklar: • • • • • Aktiviteleri bölmek (dividing activities) Denge (balance) Bilgileri Ayırmak (data splitting) Veri bağımlılığı (data dependency) Test ve Hata Ayıklama (testing and debugging) Java İş Parçacıkları • Java iş parçacıkları JVM tarafından yönetilir • Bir Java uygulaması birden fazla iş parçacığına sahip olabilir • Tüm iş parçacıkları bir önceliğe (priority) sahiptir • Öncelikli iş parçacıklarına, az öncelikli iş parçacıklarına göre daha çok işlemci zamanı ayrılır • Tüm iş parçacıkları, birbirlerinden ayırt edilebilmeleri için bir isme sahiptir • Bir iş parçacığı oluşturulurken ismi belirtilmemişse, bir isim kendiliğinden oluşturulur İş Parçacığını Tanımlama 1. Runnable arayüzünü gerçekleştirerek class ThreadRunnable implements Runnable { public void run() { // yeni iş parçacığında çalışacak kodlar } } 2. Thread sınıfını temel alan yeni bir sınıf oluşturarak class MyThread extends Thread { public void run() { // yeni iş parçacığında çalışacak kodlar } } İş Parçacığını Çalıştırma • İş parçacığını çalıştırmak için öncelikle iş parçacığı nesnesi oluşturulmalıdır MyThread myThread = new MyThread(); • Ardından nesnenin start metodu çağırılarak iş parçacığı başlatılır myThread.start(); • Bu iki adım, bir nesne değişkeni kullanılmaksızın aşağıdaki şekilde birleştirilrbilir (new MyThread()).start(); Thread Sınıfını Kullanarak İş Parçacığı Tanımlama public class ThreadBaslat extends Thread { public void run() { System.out.println("thread calisti"); } public static void main(String args[]) { (new ThreadBaslat()).start(); } } Runnable Arayüzünü Kullanarak İş Parçacığı Tanımlama public class ThreadRunnable implements Runnable { public void run() { System.out.println("ThreadRunnable calisti"); } public static void main(String args[]) { (new Thread(new ThreadRunnable())).start(); } } Java İş Parçacığı Durumları Eclipse Dağıtımı ve Projeleri • Derste kullanılan Eclipse dağıtımı ve projelerini, dersin web sayfasından indirebilirsiniz • Eclipse’i çalıştırmadan önce bilgisayarınızda Java Geliştirme Ortamı’nın (JDK) kurulu olduğundan emin olunuz • Eclipse dağıtımı arşiv dosyasını indirip bir klasöre çıkardıktan sonra, Eclipse’i açmak için Eclipse.exe’ye tıklamanız yeterlidir Projeleri İçeri Aktarmak (1/2) • bm206-examples.zip dosyasını açın • File -> Import... • General -> Existing Projects into Workspace • «Next >» butonuna tıklayın Projeleri İçeri Aktarmak (2/2) • «Browse...» butonuna tıklayın • Proje örneklerini içeren dizini seçin • «Copy projects into workspace» i seçin • «Finish» butonuna tıklayın • Projeler «Package Explorer» a eklenecektir Soketler (Sockets) • Bir ağ üzerinde çalışan iki işlem arasında veri alışverişi sağlayan sanal bağlantı noktalarıdır • Ağ programlamada TCP ve UDP olmak üzere iki tip bağlantı şekli kullanılır • Her soketin port adı verilen sanal bir bağlantı noktası bulunur • Port 0 ile 65535 aralığında bir tamsayıdır Soketler (Sockets) • Soket programlama, hedefe ait IP adresi ve port numarası kullanılarak gerçekleştirilir • 161.25.19.8:1625 soketi 161.25.19.8 IP’li makinanın 1625 numaralı portuna arşılık gelmektedir • İletişim bir çift soket arasında gerçekleşir • Taraflar çoğu zaman sunucu ve istemci olarak isimlendirilirler • Sunucu gelen istekleri bekleyip, istek geldiğinde cevap verir • İstemci ise sunucuya bağlanarak ihtiyaç duyduğu bilgiyi elde eder Soket İletişimi Çok İş Parçacıklı Sunucu Mimarisi Sık Kullanılan Servisler için Varsayılan Portlar Soket Oluşturma Girdi/Çıktı Stream’leri Soket Programlama Örneği – Sunucu Soket Programlama Örneği – İstemci İş Parçacığı ve Soket Örnek Uygulamaları