Finché scriverai programmi strettamente sequenziali (fai A, poi B, poi C; finito!) non hai problemi di concorrenza, e i meccanismi di concorrenza di un linguaggio rimangono irrilevanti .
Quando ti diplomi dai programmi di "esercizio di programmazione" a cose del mondo reale, molto presto ti imbatti in problemi la cui soluzione è il multi-threading (o qualsiasi altro sapore di concorrenza che hai a disposizione).
Caso: programmi con una GUI. Supponi di scrivere un editor con il controllo ortografico. Si desidera che il correttore ortografico esegua tranquillamente il suo compito in background, tuttavia si desidera che la GUI accetti facilmente l'input dell'utente. Quindi esegui queste due attività come thread separati.
Caso: di recente ho scritto un programma (per lavoro) che raccoglie le statistiche da due file di registro e li scrive in un database. Ogni file richiede circa 3 minuti per l'elaborazione. Ho spostato questi processi in due thread che corrono fianco a fianco, tagliando il tempo di elaborazione totale da 6 minuti a poco più di 3.
Caso: Scientific/ingegneria del software di simulazione. Ci sono un sacco di problemi che vengono risolti calcolando un certo effetto (flusso di calore, diciamo) in ogni punto di una griglia tridimensionale che rappresenta il soggetto del test (nucleo stellare, esplosione nucleare, dispersione geografica di una popolazione di insetti ...). Fondamentalmente lo stesso calcolo viene eseguito in ogni punto e in molti punti, quindi ha senso farlo in parallelo.
In tutti questi casi e molti altri, ogni volta che due processi informatici accedono alla stessa memoria (= variabili, se lo si desidera) all'incirca nello stesso tempo, è possibile che interferiscano tra loro e rovinino il lavoro gli uni degli altri. L'enorme branca dell'Informatica che si occupa di "programmazione concorrente" si occupa di idee su come risolvere questo tipo di problema.
Una discussione di partenza ragionevolmente utile di questo argomento si possono trovare in Wikipedia.
fonte
2009-09-26 09:34:23
Chi è "qualcuno"? Potresti fare un esempio? Non penso ci sia qualcuno che condivide i miei oggetti con me. Forse dovrei controllare sotto il letto. –
* qualcuno * è solo un altro pezzo di codice, in un altro thread, che accede a quell'oggetto. –
Talvolta è più veloce a volte più lento, come la maggior parte delle ottimizzazioni eseguite senza misurare. Quindi a volte è una buona cosa, ea volte quelle serrature sarebbero andate meglio. Questo è il motivo per cui siamo chiamati software ** ingegneri **. – Eloff