C ++ Socket Server - Nie można nasycić procesora

Opracowałem mini serwer HTTP w C ++, używając boost :: asio, a teraz ładuję go testując z wieloma klientami i nie byłem w stanie zbliżyć się do nasycenia procesora. Testuję na instancji Amazon EC2 i uzyskuję około 50% wykorzystania jednego procesora, 20% innego, a pozostałe dwa są bezczynne (zgodnie z htop).

Detale:

Serwer uruchamia jeden wątek na rdzeńŻądania są odbierane, analizowane, przetwarzane, a odpowiedzi są wypisywaneŻądania dotyczą danych, które są odczytywane z pamięci (tylko do odczytu dla tego testu)„Ładuję” serwer za pomocą dwóch komputerów, z których każdy uruchamia aplikację Java, uruchamiając 25 wątków, wysyłając żądaniaWidzę około 230 żądań / sekundę przepustowości (to jestpodanie żądania składające się z wielu żądań HTTP)

Więc na co powinienem zwrócić uwagę, aby poprawić ten wynik? Biorąc pod uwagę, że procesor jest w większości bezczynny, chciałbym wykorzystać tę dodatkową pojemność, aby uzyskać wyższą przepustowość, powiedzmy 800 żądań / s lub cokolwiek.

Pomysły, które miałem:

Żądania są bardzo małe i często realizowane w ciągu kilku ms. Mogę zmodyfikować klienta, aby wysyłał / komponował większe żądania (być może przy użyciu grupowania)Mogę zmodyfikować serwer HTTP, aby używał wzorca wyboru Wybierz, czy jest to właściwe tutaj?Mogę zrobić profilowanie, aby zrozumieć, czym są / są wąskie gardła

questionAnswers(6)

yourAnswerToTheQuestion