BMS-302 İleri Web Programlama

advertisement
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ı
Download