Voglio scrivere un'applicazione server multithread che sia in grado di elaborare le richieste in modo multithreading mantenendo l'ordine di esecuzione delle richieste in arrivo dello stesso client.
Ad esempio se il client A invia un messaggio M1 e quindi un messaggio M2, il server muiltithread deve elaborare queste richieste esattamente nello stesso ordine, prima M1 e poi M2. Tuttavia, non vi è alcuna garanzia che i thread che elaborano queste richieste in arrivo elaborino questi messaggi nello stesso ordine.
Ad esempio, il thread T1 utilizza il messaggio M1, il thread T2 utilizza il messaggio M2 e completa l'elaborazione del messaggio ed è in grado di accettare ulteriori messaggi prima che T1 abbia terminato il suo lavoro.
Dopo che un messaggio è stato elaborato, il risultato verrà passato ad un altro processo per l'ulteriore elaborazione (di cui solo uno esiste nell'intero calcolo), questo processo pianificherà l'invio di una risposta al client.
Questi thread multipli esistono solo allo scopo di preelaborare i dati per qualche altro processo. Questo particolare problema sembra un problema con le caratteristiche della pipeline, prima M1, poi M2, poi M3, ecc. Tuttavia, ho voluto parallelizzarlo il più possibile per ottenere un numero maggiore di cicli di comunicazione tra il server e i client.
Quale architettura / modello / tecnica è adatta per questo tipo di compito?