410 Stimmen

Wie viele Threads sind zu viele?

Ich schreibe einen Server, und ich sende jede Aktion in einen separaten Thread, wenn die Anforderung empfangen wird. Ich tue dies, weil fast jede Anfrage eine Datenbankabfrage macht. Ich verwende eine Threadpool-Bibliothek, um die Konstruktion/Destruktion von Threads zu reduzieren.

Meine Frage ist: Was ist ein guter Grenzwert für E/A-Themen wie diese? Ich weiß, es wäre nur eine grobe Schätzung, aber reden wir von Hunderten? Tausenden?

Wie könnte ich herausfinden, wie hoch dieser Grenzwert ist?


EDITです。

Ich danke Ihnen allen für Ihre Antworten. Es sieht so aus, als müsste ich es einfach ausprobieren, um meine Obergrenze für die Fadenzahl herauszufinden. Die Frage ist allerdings: Woher weiß ich, dass ich diese Grenze erreicht habe? Was genau sollte ich messen?

3voto

newdayrising Punkte 3722

Dabei ist zu berücksichtigen, wie viele Kerne auf dem Rechner vorhanden sind, auf dem der Code ausgeführt werden soll. Dies stellt eine harte Grenze dafür dar, wie viele Threads zu einem bestimmten Zeitpunkt ausgeführt werden können. Wenn jedoch, wie in Ihrem Fall, zu erwarten ist, dass Threads häufig darauf warten, dass eine Datenbank eine Abfrage ausführt, werden Sie Ihre Threads wahrscheinlich darauf abstimmen wollen, wie viele gleichzeitige Abfragen die Datenbank verarbeiten kann.

3voto

mmr Punkte 14571

Ich glaube, das ist ein bisschen ein Ausweichen auf Ihre Frage, aber warum nicht in Prozesse aufspalten? Mein Verständnis von Netzwerken (aus den verschwommenen Tagen von früher, ich programmiere nicht wirklich Netzwerke überhaupt) war, dass jede eingehende Verbindung als separater Prozess behandelt werden kann, weil dann, wenn jemand etwas böses in Ihrem Prozess tut, es nicht das gesamte Programm nuke.

2voto

hyperboreean Punkte 8117

Ryeguy, ich entwickle derzeit eine ähnliche Anwendung, und die Anzahl meiner Threads ist auf 15 festgelegt. Wenn ich sie auf 20 erhöhe, stürzt sie leider ab. Also, ja, ich denke, der beste Weg, damit umzugehen, ist zu messen, ob Ihre aktuelle Konfiguration mehr oder weniger als eine Anzahl X von Threads zulässt oder nicht.

-6voto

GEOCHET Punkte 20824

In den meisten Fällen sollten Sie diese Aufgabe dem Thread-Pool überlassen. Wenn Sie etwas Code posten oder mehr Details angeben, könnte es einfacher sein, zu sehen, ob es einen Grund gibt, warum das Standardverhalten des Threadpools nicht am besten wäre.

Weitere Informationen darüber, wie das funktionieren soll, finden Sie hier: http://en.wikipedia.org/wiki/Thread_pool_pattern

-12voto

masfenix Punkte 7196

So viele Threads wie CPU-Kerne, das habe ich sehr oft gehört.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X