[linux-l] Java Thread vs. c fork
Thomas Knop
tknop at maxrelax.de
So Okt 19 22:51:25 CEST 2003
Hallo
Ich fange mal einen neuen Thread (welch Ironie :) an, da das doch ein anderes Thema
ist.
Hier mein Testcode (kurz genug um zu posten):
cat > tfork.c <<EOF
#include <unistd.h>
#define N 1000
int count = 0;
int main(int argc, char *argv[])
{
register int pid;
while (count < N) {
switch (pid = fork()) {
case -1:
{
char *err = "can't fork :-(";
write(2, err, strlen(err));
write(2, "\n", 1);
exit(1);
}
;;
case 0: /* child */
sleep(10);
exit(0);
;;
default: /* parrent */
count++;
}
}
}
EOF
Ergebnisse
==========
System: Pentium MMX 233 MHz, 256 MB RAM
diet gcc -Os -o tfork tfork.c
time ./tfork
real 0m1.191s
user 0m0.000s
sys 0m0.940s
gcc -Os -o tfork tfork.c
time ./tfork
real 0m1.588s
user 0m0.000s
sys 0m1.000s
Auf meinem Pentium III 600 MHz Notebook waren die Zeiten schon < 0.2s, was
ich dann als zu ungenau empfinde. Auf meinem Athlom XP 2500+ Mobile war die
Zeit nicht mehr messbar ;-)
PS: Die Zeitmessung mittels time ist natürlich nicht sehr genau, da die Zeit
zum Starten des Parrent ja auch noch dazu kommt. Das sollte in Java anders
gelöst werden.
PPS: Viel mehr als unter (PC-)Linux interessieren mich die Ergebnisse ja auf
einer aktuellen SUN Maschine. a) wei SUN/Solaris ja "designed for Java" ist
und b) weil SUN behauptet unter Solaris würden Threads (lightwight processes)
viel schneller als reinrassige Prozesse gestartet werden. Wenn ich den Java
Code habe, teste ich das gerne mal.
Gruß Thomas Knop
Mehr Informationen über die Mailingliste linux-l