beh, dipende davvero da cosa stai sviluppando. la risposta, a seconda di ciò che stai sviluppando, può variare da "è insignificante" a "è assolutamente fondamentale, e ci aspettiamo che tutti i membri del team abbiano una buona comprensione e un uso delle implementazioni parallele".
nella maggior parte dei casi, una solida comprensione e utilizzo di blocchi, thread, attività e pool di attività sarà un buon inizio quando è necessaria la necessità di parallelismo. (varia in base a lang / lib)
a ciò si aggiungono le differenze nei progetti che è necessario apportare: per il multiprocessing non banale si devono spesso apprendere diversi nuovi modelli di programmazione o strategie di parallelizzazione. in tal caso, il tempo per imparare, per fallire abbastanza tempo per avere una solida comprensione e per aggiornare i programmi esistenti può richiedere una squadra un anno (o più). una volta raggiunto quel punto, (si spera!) non perderete né affronterete problemi / implementazioni come fate oggi (a condizione che non abbiate ancora fatto quella transizione).
un altro ostacolo è che stai effettivamente ottimizzando un programma per una certa esecuzione. se non ti viene concesso molto tempo per ottimizzare i programmi, non ne trarrai alcun vantaggio quanto dovresti. la parallelizzazione di alto livello (o ovvio) può migliorare la velocità percorsa del tuo programma con uno sforzo abbastanza ridotto, e questo è quanto oggi molti team faranno: "Abbiamo parallelizzato le parti davvero ovvie dell'app" - va bene in alcuni casi. il beneficio derivante dall'assunzione di frutti a bassa pendenza e dall'utilizzo della semplice parallelizzazione sarà proporzionato al numero di core? spesso, quando ci sono da due a quattro core logici, ma non così spesso oltre. in molti casi, questo è un rendimento accettabile, dato il tempo investito. questo modello parallelo è l'introduzione di molte persone all'implementazione di buoni usi del parallelismo.
ciò che impari usando questi banali modelli paralleli non sarà l'ideale in tutti gli scenari paralleli complessi; l'applicazione efficace di progetti paralleli complessi richiede una comprensione e un approccio molto diversi. questi semplici modelli sono spesso staccati o hanno una banale interazione con altri componenti del sistema. inoltre, molte implementazioni di questi banali modelli non si adattano bene a sistemi paralleli effettivamente complessi - una cattiva progettazione parallela complessa può impiegare tanto tempo per essere eseguita come il modello semplice. ill: esegue due volte più velocemente del modello a thread singolo, mentre utilizza 8 core logici durante l'esecuzione. gli esempi più comuni stanno usando / creando troppi thread e alti livelli di interferenza di sincronizzazione. in generale, questo è chiamato rallentamento parallelo. è abbastanza facile incontrarsi se si affrontano tutti i problemi paralleli come semplici problemi.
quindi, supponiamo che dovresti davvero utilizzare un multithreading efficiente nei tuoi programmi (la minoranza, nel clima di oggi): dovrai utilizzare il modello semplice in modo efficace per apprendere il modello complesso e quindi riapprendere come approcci il flusso e l'interazione del programma. il modello complesso è il punto in cui dovrebbe trovarsi il tuo programma poiché è lì che si trova l'hardware oggi e dove verranno apportati i miglioramenti più importanti.
l'esecuzione di modelli semplici può essere immaginata come una forcella e i modelli complessi funzionano come un ecosistema complesso. penso che la comprensione di modelli semplici, inclusi il blocco generale e il threading, dovrebbe essere o sarà presto prevista dagli sviluppatori intermedi quando il dominio (in cui si sviluppa) lo utilizza. comprendere modelli complessi è ancora un po 'insolito oggi (nella maggior parte dei domini), ma penso che la domanda aumenterà abbastanza rapidamente. come sviluppatori, molti più dei nostri programmi dovrebbero supportare questi modelli e la maggior parte dell'uso è molto indietro nella comprensione e nell'implementazione di questi concetti. poiché il conteggio dei processori logici è una delle aree più importanti per il miglioramento dell'hardware, la domanda di persone che comprendono e possono implementare sistemi complessi aumenterà sicuramente.
infine, ci sono molte persone che pensano che la soluzione sia semplicemente "aggiungere parallelizzazione". spesso è meglio velocizzare l'implementazione esistente. è molto più semplice e molto più semplice in molti casi. molti programmi in natura non sono mai stati ottimizzati; alcune persone hanno appena avuto l'impressione che un giorno la versione non ottimizzata sarebbe stata eclissata dall'hardware. migliorare la progettazione o gli algoritmi dei programmi esistenti è anche un'abilità importante se le prestazioni sono importanti: lanciare più core ai problemi non è necessariamente la soluzione migliore o più semplice.
quando si prendono di mira i PC moderni, la maggior parte di noi che ha bisogno di implementare buoni sistemi paralleli non dovrà andare oltre il multithreading, il blocco, le librerie parallele, la lettura di un libro e molta esperienza nella scrittura e nel collaudo di programmi (fondamentalmente, ristrutturando in modo significativo il modo in cui avvicinarsi alla scrittura di programmi).