Una buona concorrenza richiede molto di più che lanciare alcuni thread in un'applicazione e sperare per il meglio. C'è un intervallo nel modo in cui un programma può passare da in modo imbarazzante parallelo al puro sequenziale. Qualsiasi programma dato può utilizzare la legge di Amdahl per esprimere quanto sia scalabile un problema o un algoritmo. Un paio di requisiti per un'applicazione imbarazzante in parallelo sarebbero:
- Nessuno stato condiviso, ogni funzione dipende solo dai parametri passati in
- Nessun accesso ai dispositivi fisici (schede grafiche, dischi rigidi, ecc.)
Ci sono altre qualifiche, ma con solo questi due possiamo capire perché i giochi in particolare non sono così facili come si potrebbe pensare di sfruttare i core multipli. Per uno, il modello del mondo che sarà reso deve essere condiviso in quanto funzioni diverse calcolano fisica, movimento, applica intelligenza artificiale ecc. Secondo, ogni fotogramma di questo modello di gioco deve essere visualizzato sullo schermo con una scheda grafica.
Per essere onesti, molti produttori di giochi utilizzano motori di gioco prodotti da terze parti. Ci è voluto un po ', ma questi motori di gioco di terze parti ora sono molto più paralleli di quello che erano.
Ci sono sfide architettoniche più grandi nell'affrontare 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 ti richiede di pensare in modo molto diverso a come costruisci la tua applicazione.
Non tutti i programmi richiedono realmente la complessità del supporto multicore completo. Uno di questi esempi è il software fiscale o qualsiasi applicazione basata su moduli. Quando trascorri la maggior parte del tuo tempo aspettando che l'utente faccia qualcosa, la complessità delle applicazioni multithread non è così utile.
Alcune applicazioni si prestano a una soluzione parallela più imbarazzante, come le applicazioni web. In questo caso, la piattaforma inizia in modo imbarazzante parallelo e tocca a te non dover imporre la contesa sui thread.
La linea di fondo:
Non tutte le applicazioni sono davvero ferite non sfruttando più thread (e quindi core). Per quelli che ne sono danneggiati, a volte i calcoli non sono amichevoli per l'elaborazione parallela o il sovraccarico per coordinarlo renderebbe l'applicazione più fragile. Sfortunatamente, l'elaborazione parallela non è ancora così facile come dovrebbe essere per fare bene.