C ++ - Socket-Server - CPU kann nicht ausgelastet werden

Ich habe einen Mini-HTTP-Server in C ++ mit boost :: asio entwickelt und teste ihn jetzt mit mehreren Clients, und ich konnte mich der Auslastung der CPU nicht annähern. Ich teste auf einer Amazon EC2-Instanz und erhalte ungefähr 50% Auslastung einer CPU, 20% einer anderen und die verbleibenden zwei sind inaktiv (laut htop).

Einzelheiten:

Der Server startet einen Thread pro KernAnfragen werden empfangen, analysiert, verarbeitet und Antworten werden ausgeschriebenDie Anforderungen beziehen sich auf Daten, die aus dem Speicher ausgelesen werden (schreibgeschützt für diesen Test).Ich lade den Server mit zwei Computern, auf denen jeweils eine Java-Anwendung ausgeführt wird, 25 Threads ausgeführt werden und Anforderungen gesendet werdenIch sehe ungefähr 230 Anfragen / Sek. Durchsatz (das istAnwendung Anfragen, die aus vielen HTTP-Anfragen bestehen)

Worauf sollte ich achten, um dieses Ergebnis zu verbessern? Angesichts der Tatsache, dass die CPU größtenteils im Leerlauf ist, möchte ich diese zusätzliche Kapazität nutzen, um einen höheren Durchsatz zu erzielen, z. B. 800 Anforderungen / Sek. Oder was auch immer.

Ideen, die ich hatte:

Die Anforderungen sind sehr klein und werden oft in wenigen ms erfüllt. Ich könnte den Client so modifizieren, dass er größere Anforderungen sendet / erstellt (möglicherweise mithilfe der Stapelverarbeitung).Ich könnte den HTTP-Server so ändern, dass er das Entwurfsmuster "Auswählen" verwendet. Ist dies hier angebracht?Ich könnte ein Profil erstellen, um zu versuchen, die Engpässe zu verstehen

Antworten auf die Frage(6)

Ihre Antwort auf die Frage