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ı