PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Erfahrungsaustausch pthreads or forks



Mattburger
17-06-2003, 12:26
Hi all,

ich habe gerade eine kleine Web-Applikation geschrieben und benutze hierzu die Indy Componenten. Als naechstes plane ich diese durch direkte API's zu ersetzen. Entweder werden hierzu mehrere Prozesse abgespalten (fork) oder es werden die pthreads verwendet.
Die Prozesse sind langsamer und brauchen mehr Resourcen / Performance - laufen dafuer jedoch stabiler.
Die Threads sind schneller jedoch nicht so sicher.

Hat jemand Erfahrung mit der Programmierung von Web-Servern ?
Was wurdet Ihr empfehlen ?

Gruesse

Mike

peschmae
17-06-2003, 13:58
macht der Prozess-Overhead unter Linux wirklich was aus?

Ich glaube die vorteile von Threads sind

unter Windows: schnelleres Task-Switching
gemeinsame Speicherstrukturen -> evtl. vereinfachte Kommunikation zwischen threads


da unter Linux abgesehen von einigen Strukturen "thread == prozess" gilt, kommt es glaubich nicht so drauf an...

Aber ich habe _keine_ Erfahrung in der Programmierung von Webservern :D

MfG Peschmä

Mattburger
17-06-2003, 14:38
macht der Prozess-Overhead unter Linux wirklich was aus?

- Generell Ja. Es wird ja der komplette Prozess kopieret und damit auch der Speicher.
Das Programm ist jedoch nicht so gross und daher Nebensache.


kommt es glaubich nicht so drauf an.

- Eben !
Ich werd wahrscheinlich ohnehin beide Versionen entwickeln und das ganze konfigurierbar machen. Ich dachte mir nur 'mal sehen was andere dazu meinen bzw. welche Erfahrungen gesammelt wurden'.

anda_skoa
17-06-2003, 16:07
Wenn zwischen den Prozessen wenig kommuniziert werden muss, dann hat Process nicht so viele Nachteile, aber ist eben sicherer.

Apache httpd 1.x benutz dieses Konzept ziemlich erfolgreich unter Unix.
Apache httpd 2.x hat da mehrere Möglichkeiten:
http://httpd.apache.org/docs-2.0/mpm.html

Ciao,
_

pik7
17-06-2003, 16:35
hallo,



Generell Ja. Es wird ja der komplette Prozess kopieret und damit auch der Speicher.
Das Programm ist jedoch nicht so gross und daher Nebensache.


Der Prozess wird nicht kopiert in dem Sinne das das programm jetzt doppelt
im Speichet existiert.
Es wird nur ein neuer Instruction-pointer erzeugt der dann auf das selbe Text-Segment
(Programm) zeigt das von beiden Prozessen dann benutzt wird..
Der Rest also Data-,Stacksegment werden erst kopiert wenn der Kindprozess auch tatsächlich drauf zugreift (COW -> Copy on write). Also FD 's usw.

nur mal so als Hint.
Das mit dem "Prozess kopieren" ist immer so irreführend

gruß