Files
Mapo-IOB-WIN/Refactor_Plan_Simula.md
T
2026-05-19 17:05:15 +02:00

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.