Ein Thread ist ein eigenständiger Ausführungsstrang innerhalb eines Prozesses, der Aufgaben sequenziell oder parallel zu anderen Threads abarbeiten kann.
Was bedeutet das?
Wenn ein Programm startet, läuft es zunächst in einem einzigen Thread, dem sogenannten Haupt-Thread. Moderne Betriebssysteme und Laufzeitumgebungen erlauben es, innerhalb eines Programms mehrere Threads gleichzeitig zu betreiben. Jeder Thread hat seinen eigenen Ausführungszeiger und seinen eigenen Stack, teilt aber den Speicherbereich des übergeordneten Prozesses mit den anderen Threads. Das ermöglicht schnelle Kommunikation zwischen Threads, erfordert aber auch sorgfältige Synchronisation, damit Threads sich nicht gegenseitig Daten korrumpieren.
Im Web-Kontext ist besonders JavaScript relevant, da es traditionell single-threaded ist. Der Browser führt JavaScript in einem einzigen Haupt-Thread aus, dem Event Loop. Alle Aufgaben, die Zeit brauchen (Netzwerkanfragen, Timeouts, DOM-Manipulationen), werden über eine Callback-Warteschlange abgewickelt, sodass der Haupt-Thread nicht blockiert wird. Seit HTML5 gibt es zusätzlich Web Workers, die echte Nebenthreads im Browser erlauben. Diese können rechenintensive Aufgaben im Hintergrund ausführen, haben aber keinen Zugriff auf das DOM.
Auf Server-Seite funktioniert PHP, das hinter WordPress läuft, prozessbasiert. Jede eingehende HTTP-Anfrage bekommt einen eigenen PHP-Prozess oder Worker innerhalb von PHP-FPM (FastCGI Process Manager). Diese Worker arbeiten isoliert voneinander und teilen keinen Speicher. Wenn viele Besucher gleichzeitig eine WordPress-Seite aufrufen, startet der Server für jede Anfrage einen eigenen PHP-Worker. Die maximale Anzahl gleichzeitig verfügbarer Worker bestimmt, wie viele parallele Anfragen der Server bedienen kann, bevor Anfragen in eine Warteschlange geraten.
Beispiel aus der Praxis
Ein WordPress-Shop erhält während einer Rabattaktion einen starken Besucheranstieg. Der Server ist mit PHP-FPM konfiguriert und erlaubt maximal 20 parallele Worker-Prozesse. Kommen mehr als 20 Anfragen gleichzeitig an, warten die überzähligen Anfragen auf einen freien Worker. Ist die Wartezeit zu lang, antwortet der Server mit einem 503-Fehler. In diesem Fall muss entweder die Anzahl der Worker erhöht werden (erfordert mehr RAM), ein Caching-System vorgeschaltet werden, das den PHP-Layer für wiederkehrende Seiten umgeht, oder die Infrastruktur auf mehrere Server skaliert werden.
Tipp aus der Praxis
Für WordPress-Betreiber ist das direkte Thread-Management selten notwendig, da PHP diese Verwaltung übernimmt. Relevant wird das Thema bei der Server-Konfiguration: Zu wenige PHP-FPM-Worker führen bei Last-Spitzen zu Timeouts, zu viele Worker auf einem Shared-Hosting-Server können den Arbeitsspeicher erschöpfen. Fragen Sie Ihren Hosting-Anbieter nach den konfigurierten Worker-Limits, wenn Ihre Website unter Last langsam wird. Ein vorgeschalteter Full-Page-Cache wie Redis Object Cache oder ein serverseitiges Page-Cache-Plugin reduziert die Anzahl der PHP-Aufrufe und entlastet den Worker-Pool erheblich.