Esistono diversi thread nella mia applicazione che funzionano in background. Si connettono al database ed eseguono alcune query selezionate che richiedono tempo. Nella maggior parte dei casi queste query restituiscono solo diversi record. Di volta in volta, tuttavia, possono restituire decine di migliaia di record. Tutti questi vengono quindi elaborati in un ciclo.Delphi - regolazione del tempo di sospensione del thread
Poiché tale situazione può verificarsi in diversi thread allo stesso tempo, non voglio la mia applicazione per utilizzare il 100% del tempo di CPU quando quei fili sono l'elaborazione dei dati; né voglio fare in modo che tutti i thread combacino per il tempo del processore. Pertanto chiamo la funzione Sleep() in ogni iterazione dei loop in quei thread.
Non so, tuttavia, come regolare il tempo di sospensione. Non voglio che i cicli durino per sempre, quindi il periodo di sonno non può essere troppo lungo. L'ho impostato su 2 millisecondi in ogni iterazione (in ogni thread) (perché 2ms? - questa è una buona domanda :)).
Ho pensato, d'altra parte, che potrei prolungare il tempo di sonno, ma chiamare il sonno solo una volta ogni iterazioni (diciamo, Sleep (100) ogni 50 iterazioni). Quale approccio dovrei scegliere? Una singola iterazione dei loop richiede circa 30 ms ciascuno (senza alcun sonno).
Si prega di avvisare.
Grazie!
Mariusz.
Ma se questo viene eseguito in background su un computer che dispone anche di qualcuno che lavora su (ad esempio scrivere un foglio di calcolo), non lo fai vuoi che il processo in background renda il processo in foreground inutilizzabile. – dummzeuch
Vero, ma è per questo che ho scritto che la priorità del thread in background può essere ridotta, mantenendo le altre app (o il thread principale) reattive mentre si utilizza ancora il potenziale completo del sistema. Sui sistemi moderni (multi-core) mantenere tutti i core sufficientemente caricati è molto più un problema della mancanza di reattività dell'applicazione in primo piano. E l'enorme I/O non ottimizzato è una minaccia molto più grande per l'usabilità di un sistema rispetto al carico elevato della CPU, comunque. – mghie