I messaggi arrivano nel mio programma con una risoluzione in millisecondi (da zero a un paio di centinaia di messaggi al millisecondo).Calcolo del numero di messaggi al secondo in una finestra a rotazione?
Mi piacerebbe fare qualche analisi. In particolare, voglio mantenere più finestre di rotolamento dei conti dei messaggi, aggiornati come messaggi sono disponibili in. Ad esempio,
- di messaggi nella all'ultimo secondo
- # dei messaggi in last minute
- # dei messaggi in ultima mezz'ora diviso di messaggi nella ultima ora
non posso mantenere un semplice conteggio come "1.017 messaggi in all'ultimo secondo", dal momento che non si sa quando un messaggio è più vecchio di 1 secondo e quindi non dovrebbe più essere nel conteggio ...
Ho pensato di mantenere una coda di tutti i messaggi, cercando il messaggio più giovane che è più vecchio di un secondo, e deducendo il conteggio dal indice. Tuttavia, sembra che sarebbe troppo lento, e mangerebbe un sacco di memoria.
Cosa posso fare per tenere traccia di questi conteggi nel mio programma in modo da poter ottenere in modo efficiente questi valori in tempo reale?
Qual è il sovraccarico per qualcosa di simile? Scalerebbe in modo appropriato? Ho dei dubbi ... – Tim
In pratica stai mantenendo un elenco collegato di timestamp intere (chiamalo 8 byte per nodo), con una lunghezza pari al numero di messaggi ricevuti in quel timestamp. Con un malloc opportunamente sintonizzato (o anche usando un buffer circolare, che userebbe anche la metà della memoria) sarebbe abbastanza performante per la maggior parte dei casi - è probabile che si incontrino problemi di prestazioni con l'elaborazione dei messaggi molto prima che questo diventi troppo lento . –