I miei 2 centesimi:
Riguarda quanto efficacemente gestisci le tue risorse e utilizzi l'hardware disponibile.
Generalmente, sarai limitato nella quantità di memoria che hai (RAM), ma c'è una quantità di velocità di elaborazione disponibile di quella che utilizziamo.
Mentre l'utilizzo efficace della memoria dipende in gran parte dalle tecniche e dagli algoritmi ( memorizzazione nella cache, aliasing, ramificazione, costo delle operazioni aritmetiche, srotolamento del ciclo (e penso ad altri che non vengono in mente) ). Nelle piattaforme in cui viene gestita la memoria (Java, .NET), l'esecuzione frequente del GC ha un impatto negativo sulle prestazioni. Se c'è meno memoria libera, GC continua a girare frequentemente cercando di liberare memoria. Quindi, tieni una scheda su come i tuoi oggetti vengono creati e distrutti. Nelle lingue in cui la memoria è gestita in modo esplicito (C, C ++), con la regola empirica, si mantiene sempre un controllo (si libera la memoria non appena si finisce l'attività). Quindi, in entrambi i casi, avere abbastanza memoria libera garantirà un minor numero di pedaggi sulle prestazioni.
La concorrenza è il modo di utilizzare la CPU in modo efficace. Invece di bloccare e mantenere la CPU inattiva, la concorrenza consente di utilizzare la CPU in modo efficace su attività che potrebbero essere eseguite in parallelo. Mentre la concorrenza è un gradino sopra i programmi a thread singolo, l'avvento delle macchine multi-core e la sua ubiquità ci impongono di fare un ulteriore passo avanti (vedi qui ) per utilizzare in modo efficace tutti i core. L'utilizzo della CPU migliora in modo efficace le prestazioni.