
Ich habe gelesen, wie Benutzer-Threads Kernel-Threads zugeordnet werden aufWikipedia. Aus diesem Artikel entnehme ich, dass FreeBSD 1:1 (Threading auf Kernelebene) verwendet.
Jeder von der Anwendung erstellte Benutzerthread wird also einem Kernelthread zugeordnet. Wenn ich davon ausgehe, dass ich einen Webserver baue, der jede neue Anfrage in einem Thread verarbeitet, und ich FreeBSD verwende, wird sich dann die Gesamtleistung der Anwendung verbessern, wenn ich die Anzahl der Kerne erhöhe?
Ich habe diese Frage gelesenCPU-Kerne: Je mehr, desto besser?, aber ich möchte, dass der Umfang der Antworten speziell von der 1:1-Zuordnung zwischen Benutzer- und Kernel-Threads beeinflusst wird.
Antwort1
Die kurze Antwort lautet: Ja.
Die lange Antwort lautet: Mehr CPU-Kerne bedeuten mehr Verarbeitungsleistung. Bei einer PHP-/Ruby-/Python-/usw.-Webanwendung bedeutet dies mehr Ressourcen für die Verarbeitung gleichzeitiger Verbindungen. Bei einer Anwendung mit hoher Auslastung machen mehr Kerne wirklich einen Unterschied.
Meine persönliche Meinung ist, dass ich mich bei der Wahl zwischen mehr Rechenleistung und mehr RAM in den meisten Fällen für mehr RAM entscheide. Mit RAM können Sie den Engpass bei der Festplatten-E/A reduzieren.
Durch den Einsatz von Cache-Systemen wiePHP APC,Lack, UndMySQL-Tuning(Tabellen-Cache, Abfrage-Cache usw.) können Sie die Leistung Ihrer Website erheblich verbessern, ohne dass zum Generieren von Inhalten mehr CPU-Leistung erforderlich ist.
Wenn Ihre Website zwischengespeichert werden kann, treffen Sie diese Wahl. Nur die Anzahl der CPU-Kerne zu erhöhen, ist auf lange Sicht eine erfolglose Entscheidung.
Antwort2
Ja.
Moderne Webserver-Software verwendet für jeden Computer, der sich mit dem Server verbindet, einen separaten Prozess oder Thread. Darüber hinaus läuft Backend-Software wie MySQL oder PHP auch in separaten Prozessen oder Threads für jeden Benutzer, den sie bedienen muss. Daher ist es immer hilfreich, mehr Kerne zu haben.
Natürlich können in anspruchsvolleren Umgebungen die Festplattenleistung, der Arbeitsspeicher oder die Netzwerkbandbreite zu Engpässen werden. Mehr Arbeitsspeicher ermöglicht mehr Lese-Caching, was die Zugriffe auf langsame Festplattenspeicher reduziert. Wie von Biapy vorgeschlagen, sollten Sie sich bei vielen Anfragen pro Sekunde spezielle Caching-Software wie Varnish ansehen, die die Systemlast erheblich reduziert.
Antwort3
Die Antwort lautet wie immer: Es kommt darauf an.
Zum Beispiel dienginxWebserverfunktioniert sehr gut, obwohl es keine Threads verwendet. Stattdessen wird eine ereignisgesteuerte Architektur verwendet. Es kann mehrere Arbeitsprozesse verwenden und tut dies auch, sodass es mehrere Kerne nutzen kann.
Wie Sie in den verlinkten Leistungsmessungen sehen können, erzeugt der Threaded-Apache-Webserver mehr Threads und verwendet mehr Speicher, wenn die Anzahl gleichzeitiger Verbindungen zunimmt. Die von Nginx verwendete Speichermenge bleibt ziemlich konstant. Und bei der Anzahl der pro Sekunde bedienten Anfragen schlägt Nginx Apache bei weitem.
Threads sind also nicht immer die beste Lösung.
Die Leistung hängt auch davon ab, wo sich Ihre Daten befinden. Wenn sie auf einer Festplatte geparkt sind, ist der Zugriff langsamer als wenn sie sich im RAM befinden, der wiederum viel langsamer ist als der Prozessor-Cache. Wenn Sie Ihren Webserver beschleunigen möchten, sollten Sie einen Beschleuniger wieLackLesen Sie weiterDieser Artikelvom Hauptautor von Varnish über die Leistung beim Web-Serving. Die Botschaft hier ist, dass Sieverwendendie integrierten Cache-Mechanismen des Betriebssystems und dass Sie nicht versuchen sollten, dies selbst zu tun.