Una buona concorrenza richiede molto di più che lanciare alcuni thread in un'applicazione e sperare nel meglio. C'è una gamma di come un programma può andare simultaneamente da parallelo imbarazzante a sequenziale puro. Ogni dato programma può usare la legge di Amdahl per esprimere quanto sia scalabile un problema o un algoritmo. Un paio di qualifiche per un'applicazione imbarazzantemente parallela sarebbero:
- Nessuno stato condiviso, ogni funzione dipende solo dai parametri passati
- Nessun accesso a dispositivi fisici (schede grafiche, dischi rigidi, ecc.)
Esistono altre qualifiche, ma solo con questi due possiamo capire perché i giochi in particolare non sono così facili come si potrebbe pensare di trarre vantaggio da più core. Per uno, il modello del mondo che verrà reso deve essere condiviso poiché diverse funzioni calcolano la fisica, il movimento, applicano l'intelligenza artificiale ecc. In secondo luogo, ogni fotogramma di questo modello di gioco deve essere reso sullo schermo con una scheda grafica.
Per essere onesti, molti produttori di giochi usano motori di gioco prodotti da terze parti. Ci è voluto un po 'di tempo, ma questi motori di gioco di terze parti sono ora molto più paralleli di prima.
Ci sono maggiori sfide architettoniche nel gestire una concorrenza effettiva
La concorrenza può assumere molte forme, dall'esecuzione di attività in background a un supporto architettonico completo per la concorrenza. Alcune lingue offrono funzionalità di concorrenza molto potenti come ERLANG , ma richiede di pensare in modo molto diverso su come costruire l'applicazione.
Non tutti i programmi richiedono realmente la complessità del supporto multicore completo. Uno di questi esempi è il software fiscale o qualsiasi applicazione guidata dai moduli. Quando trascorri la maggior parte del tuo tempo ad aspettare che l'utente faccia qualcosa, la complessità delle applicazioni multithread non è poi così utile.
Alcune applicazioni si prestano a una soluzione più imbarazzantemente parallela, come le applicazioni web. In questo caso, la piattaforma inizia in modo imbarazzante parallelo e dipende da te non devi imporre la contesa del thread.
La linea di fondo:
Non tutte le applicazioni sono realmente danneggiate dal non sfruttare più thread (e quindi i core). Per quelli che ne sono feriti, a volte i calcoli non sono amichevoli all'elaborazione parallela o il sovraccarico per coordinarlo renderebbe l'applicazione più fragile. Sfortunatamente, l'elaborazione parallela non è ancora così facile come dovrebbe essere fare bene.