[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