30 lines
2.3 KiB
Markdown
30 lines
2.3 KiB
Markdown
# Piano di Refactor: Ottimizzazione Simulatore (`Simula.cs`)
|
|
|
|
**Obiettivo Primario:** Ridurre il consumo di CPU reale (visto da Proxmox) minimizzando il context switching e la saturazione dei thread, senza modificare la classe base `Generic` o l'architettura WinForms.
|
|
|
|
## Strategia di Intervento
|
|
L'approccio si basa sul concetto di **"Staggering & Throttling"**: disallineare le istanze tra loro e ridurre la frequenza delle operazioni che generano traffico o context switch.
|
|
|
|
### Fase 1: Disallineamento delle Istanze (Jittering) - [COMPLETATA]
|
|
Per evitare il fenomeno del "Thundering Herd" (tutte le decine di istanze che si svegliano e lavorano nello stesso millisecondo), implementeremo:
|
|
- **Jitter di Inizializzazione:** Un ritardo casuale all'avvio dei task (aumentato a 10s).
|
|
- **Jitter dei Periodi:** Applicazione di un rumore statistico ai periodi di esecuzione (`periodoMSec`) per evitare che le frequenze di polling si sincronizzino tra le varie VM.
|
|
|
|
### Fase 2: Riduzione del Carico di Comunicazione (Throttling I/O) - [COMPLETATA]
|
|
Ridurre il numero di chiamate verso Redis e il Server MES/IO:
|
|
- **Filtro "Change-Only" (Dirty Check):** Prima di chiamare metodi come `upsertKey` o `trySendPzCountBlock`, verifichiamo rigorosamente se il valore simulato è effettivamente diverso dall'ultimo valore inviato con successo (`lastSentPzCount`).
|
|
- **Throttling Decodifica:** Limitazione della frequenza di `decodeToBaseBitmap` (max ogni 500ms) per evitare chiamate HTTP sincrone troppo frequenti.
|
|
|
|
### Fase 3: Ottimizzazione della Logica Interna e Async - [COMPLETATA]
|
|
- **Eliminazione Sync-over-Async:** Rimozione massiccia dei pattern `.GetAwaiter().GetResult()` e `Task.Run(...).GetResult()`.
|
|
- **Fire-and-Forget Controllato:** Utilizzo di `_ = Task.Run(async () => ...)` per i processi di sincronizzazione (`ProcessDataSync`) e caricamento (`Simula_Load`), evitando di bloccare i thread di polling o di sistema.
|
|
- **Riduzione verbosità:** (Opzionale/In corso) Minimizzazione dei log nei cicli critici.
|
|
|
|
## Stato del Lavoro
|
|
- [x] Analisi completa della gerarchia e dei colli di bottiglia.
|
|
- [x] Implementazione Fase 1 (Jittering).
|
|
- [x] Implementazione Fase 2 (Dirty Check I/O & Bitmap Throttling).
|
|
- [x] Implementazione Fase 3 (Rimozione ponti Sync-over-Async).
|
|
- [ ] Test e verifica (Simulazione in ambiente controllato).
|
|
- [ ] Rollout/Test in produzione.
|