Das Verhalten ist das folgende: z. Ein Server-Worker mit 200 Sockets verarbeitet 100 K Echos pro Sekunde. Das Starten eines anderen Server-Worker auf demselben Port (mit der gleichen Anzahl von Sockets oder doppelt weniger für jeden Worker, spielt keine Rolle) verringert die Leistung des ersten Worker sofort auf etwa 50% und verbessert die Gesamtleistung pro Maschine (jeder Worker dient nur geringfügig) etwa 50K Echos pro Sekunde).Windows Netzwerk IOCP Skalierbarkeit über mehrere Kerne
So ist Leistung der Maschine mit 6 Kernen ungefähr die selbe wie für Kernmaschine 1.
Ich habe verschiedene Ansätze mit z. Sie haben einen unabhängigen IOCP-Port für jeden Worker (indem Sie NumberOfConcurrentThreads in CreateIoCompletionPort auf 1 festlegen) oder versuchen einen gemeinsamen IOCP-Port für alle Worker (NumberOfConcurrentThreads ist gleich der Anzahl der Worker), die Leistung ist die gleiche. Meine Arbeiter teilen Null Daten, so dass es keine Sperren usw. gibt.
Ich hoffe, ich vermisse etwas und es ist nicht Windows Kernel Netzwerk Skalierbarkeit Probleme. Ich verwende Windows 7 Enterprise x64.
Natürlich war die Erwartung für eine annähernd lineare Skalierung der Leistung.
Kennt jemand die praktische Skalierbarkeit von IOCP über mehrere Kerne auf einer Maschine? Welche Situation ist zu erwarten, wenn die Anzahl aktiver Sockets steigt?
Vielen Dank!
Danke für die Antwort. Da Sie mit Ihrem Projekt viel gearbeitet haben, können Sie bitte Zahlen angeben, wie Ihr Framework unter der Anzahl der Kerne/Arbeiter auf einer Maschine skaliert? Und auf die Anzahl der Steckdosen? Vielen Dank. –
Ich habe keine Zahlen dafür zur Hand. Wir führen im Allgemeinen nur Leistungstests durch, um eine Version mit einer anderen zu vergleichen und um spezifische kundenspezifische Server für Kunden zu entwickeln. –