Buon giorno a tutti,

cerco di far il punto della situazione su un mio problema, di modo da vedere se sto andando nella direzione giusta o meno.

Voglio costruire una architettura software modulare (tante classi conbinabili tra loro a discrezione di chi poi usa tale software) che analizza una serie di pacchetti di byte il cui ordine è fisso e vengono letti da un file di input.
La mia idea è quella creare un set di blocchetti (classi che derivano da una classe astratta "blocco") che eseguono varie operazioni sul singolo pacchetto, tali blocchetti realizzano, a seconda di come vengono disposti in sequenza, una catena di analisi dei pacchetti di byte: ognuno transita attraverso la sequenza di blocchetti fino ad uscirne.

Come faccio: il main legge un file di input dove è scritta la sequenza di blocchetti da eseguire (ogni blocchetto potrà essere configurato con parametri etc), per ogni blocchetto crea l'oggetto e poi lancia un thread per ogni blocchetto (tutti i blocchetti hanno un metodo DoWork() che viene lanciato in un thread a se).
Ogni blocco ha una porta in ingresso e una in uscita, queste sono realizzate con una coda (sono in c# per cui uso Queue). Attraverso dei lock() gestisco la'ccesso ad una coda tra blocchi contigui.

Per ora ho buttato giù le classi base e ho creato due blocchetti di test per vedere se almeno i pacchetti transitano correttamente senza dar errori...
I pacchetti sembrano transitare correttamente MA a seconda di un pò di varianti sul tema (ad es se ogni blocchetto legge un pacchetto alla volta dalla sua porta in ingresso piuttosto che N alla volta, per bloccarla meno volte con il lock..) le performance sono molto diverse e anche fissando tutto e ripetendo lo stesso test diverse volte...si ootengono tempistiche diverse.

Da un punto di vista teorico io son di fronte ad una serie di code in cui ciascun servente è un thread...vorrei capire come approcciare al problema per gestire in modo sensato (e magari dinamico in runtime) il flusso attraverso questa pipeline di thread, se così posso chiamarla. Avete suggerimenti?

Spero possa essere un utile e interessante spunto non solo per me,

ciao,

Bade