Fork Bombe in Programmiersprache (Bildungszweck)?
Ich hab mich über Fork Bomben informiert und dann in einer Linux VM versucht selber eine zu coden . Einmal in C und in Python, da ist mir aufgefallen, dass die in C wesentlich länger braucht um das System zu crashen als in Python oder Bash, aber wieso ist das so? Sollte es nicht schneller gehen, da C ja generell schneller ist?
Der Code in Python:
import os
while True:
os.fork()
Der Code in C:
#include <unistd.h>
int main() {
for (;;) {
fork();
}
return 0;
}
Der Code in bash:
:(){ : | :& };:
Der Code macht doch eigentlich in jeder Sprache genau das selbe, wieso dann dieser Performance unterschied?
2 Antworten
Die C-Prozesse sind nun mal wesentlich leichtgewichtiger als ein kompletter Python-Interpreter, der wahrscheinlich trotz der engen Schleife das CoW-Speichermanagement rasch aushebelt - da tut sich einfach mehr drin.
Ergo lassen sich mehr davon betreiben. Die Frage ist dabei ja vor allem, welche Ressource als erste erschöpft ist - die Prozesstabelle oder das darauf gesetzte ulimit, der virtuelle Speicher…
Dass Python das system schneller crasht heißt nicht dass die Performance besser ist, sondern dass sie schlechter ist. Ein Crash ist ja schlecht, und nicht gut.
Bei python verbrauchen die einzelnen Prozesse halt mehr Speicher.
In diesem Fall Prozesse, nicht Threads.