Domanda

Esiste qualche vantaggio in termini di prestazioni nell'utilizzo di più thread su un computer con una singola CPU che non dispone di hyperthreading?

È stato utile?

Soluzione

In termini di velocità di calcolo, n.In effetti le cose rallenteranno a causa del sovraccarico di gestione dei thread.

In termini di reattività, sì.Puoi ad esempio fare in modo che un thread attenda un'operazione di IO e che un altro esegua una GUI contemporaneamente.

Altri suggerimenti

Dipende dalla tua applicazione.Se trascorre tutto il suo tempo utilizzando la CPU, il multithreading rallenterà semplicemente le cose, anche se potresti essere in grado di usarlo per essere più reattivo all'utente e quindi dare il massimo impressione di prestazioni migliori.

Tuttavia, se il tuo codice è limitato da altri fattori, ad esempio dall'utilizzo del file system, della rete o di qualsiasi altra risorsa, il multithreading può aiutare, poiché consente alla tua applicazione di comportarsi in modo asincrono.Pertanto, mentre un thread attende il caricamento di un file dal disco, un altro può interrogare un server Web remoto e un altro ridisegnare la GUI, mentre un altro sta eseguendo vari calcoli.

Lavorare con più thread può anche semplificare la logica aziendale, poiché non è necessario prestare molta attenzione a come le varie attività indipendenti devono intercalarsi.Se la logica di pianificazione del sistema operativo è migliore della tua, potresti effettivamente notare un miglioramento delle prestazioni.

Puoi prendere in considerazione l'utilizzo del multithreading su una singola CPU

  1. Se usi le risorse di rete
  2. Se esegui operazioni di I/O ad alta intensità
  3. Se estrai dati da un database
  4. Se sfrutti altre cose con possibili ritardi
  5. Se vuoi realizzare la tua app con una reazione ultraveloce

Quando non dovresti usare il multithreading su una singola CPU

  1. Operazioni ad alta intensità che utilizzano quasi il 100% della CPU
  2. Se non sei sicuro di come utilizzare i thread e la sincronizzazione
  3. Se la tua candidatura non può essere suddivisa in più processi paralleli

Sì, c'è un vantaggio nell'utilizzare più thread (o processi) su una singola CPU: se un thread è occupato in attesa di qualcosa, gli altri possono continuare a svolgere un lavoro utile.

Tuttavia, ciò può essere compensato dal sovraccarico derivante dal cambio di attività.Dovrai effettuare un benchmark e/o un profilo tuo applicazione su hardware di produzione per scoprirlo.

Indipendentemente dal numero di CPU disponibili, se necessiti di multitasking preventivo e/o di applicazioni con componenti asincrone (es.praticamente tutto ciò che combina una GUI reattiva con una quantità non banale di calcoli o elaborazione I/O continua), il multithreading funziona molto meglio dell'alternativa, che consiste nell'utilizzare più processi per ciascuna applicazione.

Questo perché i thread nello stesso processo possono scambiare dati in modo molto più efficiente rispetto a più processi, poiché condividono lo stesso contesto di memoria.

Vedere questo articolo di Wikipedia sul multitasking del computer per una discussione abbastanza concisa di questi problemi.

Assolutamente!Se esegui qualsiasi tipo di I/O, c'è un grande vantaggio nell'avere un sistema multithread.Mentre un thread attende un'operazione di I/O (che è relativamente lenta), un altro thread può svolgere un lavoro utile.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top