Hallo Zusammen
Ich versuche gerade eine Lineare Suche mit Threads zu beschleunigen. Leider dauert meine Suche mit Threads wesentlich länger als ohne. Ich habe mit einer Arraylänge von 10000000 getestet, und das Array in unterschiedlich große Teile zerteil, die besten Ergebnise (aber immernoch ziemlich schlecht) habe ich mit 10000 teilen, also 1000 Threads erhalten. Was mir viel zu viel erscheint.
Könnt Ihr mir vielleicht sagen, was ich bei meiner Testklasse falsch mache?
Ich versuche gerade eine Lineare Suche mit Threads zu beschleunigen. Leider dauert meine Suche mit Threads wesentlich länger als ohne. Ich habe mit einer Arraylänge von 10000000 getestet, und das Array in unterschiedlich große Teile zerteil, die besten Ergebnise (aber immernoch ziemlich schlecht) habe ich mit 10000 teilen, also 1000 Threads erhalten. Was mir viel zu viel erscheint.
Könnt Ihr mir vielleicht sagen, was ich bei meiner Testklasse falsch mache?
Java:
public static void main(String[] args) {
long starten = System.currentTimeMillis();
int tNumber = 0;
int slize = 100;// Variable which is the size of the parts in which the
// array will be splitted
int temp = slize;
// Array Size and Search Key will be given as an argument
int[] arr = new int[Integer.parseInt(args[0])];
int searchKey = 6000;//Integer.parseInt(args[1]);
Thread[] ts;
// fills Array arr with Integers
for (int j = 0; j < arr.length; j++) {
arr[j] = j;
}
// Splitting the Array
if (arr.length < slize) {
problem2.LinearSearch ls = new problem2.LinearSearch(arr, 0, arr.length, searchKey,
slize, starten);
ls.run();
} else {
for (int i = 0; i < Integer.parseInt(args[0]); i++) {
if (i > temp) {
tNumber++;
temp = temp + slize;
}
}
}
ts = new Thread[tNumber];
// Creates Threads
for (int j = 0; j < tNumber; j++) {
int start = slize * j; // calculation start and end of each Array
int end = slize * (j + 1);
if (j == tNumber)
end = arr.length;
ts[j] = new Thread(new problem2.LinearSearch(arr, start, end, searchKey,
slize, starten));
ts[j].setName(Integer.toString(j));
}
// Starts the Threads
for (int k = 0; k < tNumber; k++) {
ts[k].start();
try {
ts[k].join();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}