Condividi tramite


Considerazioni sul multitasking

La linea guida consigliata consiste nell'usare il minor numero possibile di thread, riducendo al minimo l'uso delle risorse di sistema. In questo modo le prestazioni risultano migliorate. Il multitasking ha requisiti di risorse e potenziali conflitti da considerare durante la progettazione dell'applicazione. Di seguito sono elencati i requisiti in termini di risorse:

  • Il sistema usa la memoria per le informazioni sul contesto richieste da processi e thread. Pertanto, il numero di processi e thread che possono essere creati è limitato dalla memoria disponibile.
  • Tenere traccia di un numero elevato di thread determina un consumo significativo di tempo del processore. Se ci sono troppi thread, la maggior parte di essi non sarà in grado di fare progressi significativi. Se la maggior parte dei thread correnti si trova in un processo, quelli contenuti in altri processi vengono pianificati meno frequentemente.

L'accesso condiviso alle risorse può creare conflitti. Per evitarli, è necessario sincronizzare l'accesso alle risorse condivise. Questo vale per le risorse di sistema (ad esempio porte di comunicazione), le risorse condivise da più processi (ad esempio handle di file) o le risorse di un singolo processo (ad esempio variabili globali) accessibili da più thread. Non è possibile sincronizzare correttamente l'accesso (nello stesso o in processi diversi) può causare problemi come deadlock e condizioni di gara. Gli oggetti e le funzioni di sincronizzazione che è possibile usare per coordinare la condivisione delle risorse tra più thread. Per altre informazioni sulla sincronizzazione, vedere Sincronizzazione dell'esecuzione di più thread. La riduzione del numero di thread rende più semplice e più efficace sincronizzare le risorse.

Una buona progettazione per un'applicazione multithreaded è il server della pipeline. In questa progettazione viene creato un thread per processore e si creano code di richieste per cui l'applicazione gestisce le informazioni di contesto. Un thread elabora tutte le richieste in una coda prima di elaborare le richieste nella coda successiva.