Sto cercando di sostituire un framework da zero. Funziona come è, ma ho avuto il compito di comprenderlo, quindi voglio sapere se qualcun altro riconosce eventuali problemi di progettazione abbaglianti che potrei affrontare in una riscrittura. Attualmente, il sistema funziona come segue:
- Server / producer inserisce molto rapidamente i dati nella memoria condivisa
- Questi dati sono organizzati come una serie di ~ 10.000 elenchi di strutture a lunghezza fissa in un buffer circolare
- Possono esserci tra 0-25 client per ognuno di questi 10.000 buffer
- I client leggono ogni singolo aggiornamento apportato alla memoria condivisa, decidono se sono interessati o meno e elaborano i dati di conseguenza.
- I client si assicurano di tenere il passo con il buffer circolare tramite un po 'di aritmetica (sono dietro, catturato, o sono stato lambito dal server?)
- L'interesse del cliente per un determinato aggiornamento è determinato controllando la propria matrice a lunghezza fissa per un puntatore pertinente. Se non viene trovato, l'aggiornamento viene saltato.
- Se meno di un numero arbitrario di aggiornamenti avviene nello spazio necessario al client, il client rimane inattivo per alcuni microsecondi.
Oltre a rimuovere il sonno, mi sembra che ci sia molto spazio per migliorare questo progetto. L'ambiente sembra essere basato sugli eventi (entrano nuovi dati, succede qualcosa) ma ci sono meccanismi di sondaggio in gioco qui. Tuttavia, se avere il produttore non è ostacolato da alcun numero di consumatori è una priorità assoluta (che è), non so davvero quale sia il design appropriato.
Immagino una sorta di sistema in cui i clienti possono iscriversi solo a determinati tipi di aggiornamenti della memoria condivisa, per essere avvisati al loro arrivo. Ciò implica un terzo programma, una sorta di intermediario tra produttore e consumatore. Sicuramente questo sarebbe estremamente dispendioso in termini di risorse e non molto efficiente?
Qualsiasi aiuto sarebbe apprezzato, e naturalmente chiarirò qualsiasi cosa io possa per presentare meglio questa domanda per una risposta. =)