Potresti considerare un semplice sistema di accodamento per consentire alle operazioni di input / output di funzionare in modo disconnesso. Quindi il tuo thread di rendering sarebbe in grado di aggiornarsi e dipingere mentre attende ancora l'input dell'utente / sistema. Ciò consentirebbe anche di spingere l'elaborazione dei dati su un'altra coda per ridurre ulteriormente la contesa.
estesa ...
Il numero di thread ottimali dipende dall'applicazione e dal carico. Troppi thread e potresti incorrere in un problema con deadlocking e contesa di commutazione. Troppo pochi e si diventa vincolati all'I / O.
-
Deadlock - La contesa delle risorse fa rallentare l'applicazione a causa di thread diversi che combattono su risorse limitate (I / O o dati)
-
Controversia di commutazione: la quantità di tempo in cui le applicazioni (o il sistema operativo) scambia / interrompe i thread è maggiore del tempo impiegato per l'elaborazione dell'I / O o dei dati
-
Limite I / O - I thread terminano in uno stato bloccato / in attesa mentre le risorse sono in uso.
Sulla contesa di commutazione hardware moderna probabilmente non è un problema a meno che non si dia la priorità ai thread in modo negativo. (Dai ai thread di blocco lunghi una priorità più alta.)
Il limite I / O è in genere meno di un problema rispetto ai deadlock e in genere può essere ridotto aumentando il numero di thread disponibili.
I deadlock sono di gran lunga i più difficili da risolvere. Il modo più semplice sarebbe probabilmente quello di utilizzare strutture di dati immutabili e anticipare una chiamata a risorse condivise che causerebbe un deadlock. Il motivo per cui sono così difficili da risolvere è che diverse parti delle risorse sono bloccate da thread diversi e potrebbero richiedere a ciascuno dei thread di scartare i dati correnti e riavviarli. (Anche questi riavvii fanno perdere all'applicazione i dati di rielaborazione del tempo.)