Ich habe es zur Zeit so, dass es einen gibt Faden die Schleife übernehmen Handling, ein Haupt-Thread für alle Stateful Logik Sachen zu tun, und dann zwei Threads pro angeschlossenen Client. Ein Clientthread verarbeitet die Eingabepipeline und verwendet Pipelinekonkurrenz, um Nachrichten an den Hauptlogik-Thread zu senden. Der andere Client-Thread verarbeitet die Ausgabe-Pipeline, ruft Nachrichten vom Haupt-Logik-Thread ab und sendet sie an den Client. 0Ist das eine vernünftige Architektur für einen Netzwerkserver mit mehreren Benutzern? (Wie viel Aufwand tut Rohre Parallelität einzuführen?)
Meine Argumentation dafür ist, dass der Hauptlogik-Thread Worker-Threads verwenden kann, um reine Berechnungen in einem unveränderlichen Zustand durchzuführen, dann alle Zustandsänderungen auf einmal durchzuführen und mit dem neuen Zustand zurückzukehren. Auf diese Weise kann ich mehrere CPUs nutzen, ohne sich um die Probleme der gleichzeitigen Zustandsänderungen kümmern zu müssen.
Ist der Aufwand für STM/Rohre-Concurrency klein genug, dass dies ein sinnvoller Ansatz ist, wenn ich mit ein paar tausend angeschlossenen Clients sendet zwei oder drei Nachrichten jeweils pro Sekunde am Ende wird?