RSS

>Threads – Multithreading

27 Feb

>Herkese merhabalar;


Bu yazımda multithreading’e değinmeye çalışacağım.Bildiğiniz gibi multithreading i destekleyen diller aynı anda birden fazla taskı çalıştırabiliyorlar ya da aynı taskı birden fazla thread e paylaşarak performans sağlayabiliyorlar.Basit bir Java uygulamasıyla da konuyu pekiştirmeye çalışalım..Benim uygulamam matrix çarpımı üzerine olacak.
Matrix çarpımıyla ilgili gerekli bilgiyi buradan alabilirsinizNormalde tahmin edebileceğiniz gibi sonuç matrixini iç içe for döngüleriyle elde edebilirdik.Ama bizim yapacağımız şey şöyle olacak. NxM ‘lik matrixi MxK ‘lik matrisle çarpmak istiyoruz.Soldaki matrixi satırlara böleceğiz ve her satırımızı sonuç matrixini oluşturmak için thread ‘lere dağıtacağız.Lafı fazla uzatmadan uygulamaya geçeyim:)
public class MyThread extends Thread {
int[][] row;
int[][] coloum;
int index;
public MyThread(int[][] _row, int[][] _coloum, int _index) {
this.row = _row;
this.coloum = _coloum;
this.index = _index;
}
@Override
public void run(){
compute(this.row, this.coloum);
}
public void compute(int[][] _row, int[][] _coloum){
for (int i = 0; i length; i++) {
TestClass.resultMatrix[index][0] += _row[0][i] * _coloum[i][0];
}
}
}
Şimdi ne yaptığımıza bir göz atalım.Ben çarpımın sağındaki matrixini Nx1’lik seçtim.Sonuç matriximiz de doğal olarak bir sütun gelecek.Thread ‘lere yolladığımız satırları sonuç matrixinin aynı indexteki satırını hesaplamasını istiyoruz.Şimdi kodumuzu test edelim.
public class TestClass {

public static int[][] resultMatrix = new int[3][1];
public static void main(String[] args) {
final int[][] A = {
{1,2,3},
{3,4,1},
{5,2,3}
};
final int[][] B = {
{4},
{3},
{2}
};
MyThread t;
for (int i = 0; i
int[][] localRow = new int[1][3];

for (int j = 0; j
localRow[0][j] = A[i][j];
}

t = new MyThread(localRow, B, i);
t.start();
try {
t.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
for (int i = 0; i < resultMatrix.length; i++) {
System.out.println(resultMatrix[i][0]);
}
}
}

Burada dikkat etmemiz gereken nokta main fonksiyonun da bir thread olduğudur.Bildiğiniz gibi join işlemi thread ‘lerde schedule ve priority yönetiminde kullanılır.Burda join kullanmasaydık yarattığımız thread ‘ler işlemlerini yaparken main fonksiyonu da aynı anda resultMatrix ‘i ekrana basmaya çalışacaktı.Böylece ortaya yanlış bir sonuç çıkacaktı.Biz thread ‘leri join ‘leyerek main fonksiyonun bizim yarattığımız thread ‘lerin çalışmasını beklemesini sağladık.Çalıştıralım ve sonucu görelim.
Herkese kolay gelsin🙂
 
1 Comment

Posted by on February 27, 2010 in Java, Multithreading, Threads

 

One response to “>Threads – Multithreading

  1. Anonymous

    March 2, 2010 at 12:42

    >dostum çok güzel yazmışsın. eline yüreğine sağlık. two thumbs up!

     

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

 
%d bloggers like this: