Qual è la differenza tra concorrenza, parallelismo e metodi asincroni?


178

La concorrenza sta eseguendo due attività in parallelo su thread separati. Tuttavia, i metodi asincroni vengono eseguiti in parallelo ma sullo stesso 1 thread. Come si ottiene questo risultato? Inoltre, che dire del parallelismo?

Quali sono le differenze tra questi 3 concetti?


8
Il termine "asincrono" può significare molte cose diverse. Questi termini sono correlati, ma non descrivono insiemi di cose disgiunte. I significati si sovrappongono e variano in base alla situazione.
Punta a punta il

2
Quindi la prima concorrenza esegue due o più processi contemporaneamente. A parte questo, essere concorrenti non significa essere paralleli. I processi paralleli richiedono due o più core mentre i processi simultanei possono condividere un singolo core nel tempo.
Rick O'Shea,

Risposte:


139

Concorrente e parallelo sono effettivamente lo stesso principio che si suppone correttamente, entrambi sono correlati ai compiti eseguiti simultaneamente anche se direi che i compiti paralleli dovrebbero essere veramente multitasking, eseguiti "allo stesso tempo" mentre concorrenti potrebbero significare che i compiti stanno condividendo il thread di esecuzione mentre sembra essere in esecuzione in parallelo.

I metodi asincroni non sono direttamente correlati ai due concetti precedenti, l'asincronia viene utilizzata per presentare l'impressione di tasking simultaneo o parallelo, ma in effetti una chiamata di metodo asincrona viene normalmente utilizzata per un processo che deve lavorare al di fuori dell'applicazione corrente e noi don non voglio aspettare e bloccare la nostra applicazione in attesa della risposta.

Ad esempio, ottenere dati da un database potrebbe richiedere del tempo, ma non vogliamo bloccare l'interfaccia utente in attesa dei dati. La chiamata asincrona accetta un riferimento di richiamata e restituisce l'esecuzione al codice non appena la richiesta è stata inviata al sistema remoto. L'interfaccia utente può continuare a rispondere all'utente mentre il sistema remoto esegue qualsiasi elaborazione richiesta, una volta restituiti i dati al metodo di richiamata, tale metodo può aggiornare l'interfaccia utente (o consegnare tale aggiornamento) come appropriato.

Dal punto di vista dell'utente, appare come multitasking ma potrebbe non esserlo.


MODIFICARE

Probabilmente vale la pena aggiungere che in molte implementazioni una chiamata di metodo asincrona farà girare un thread ma non è essenziale, dipende davvero dall'operazione eseguita e da come la risposta può essere notificata al sistema.


34
Direi che hai parallelismo e concorrenza confusi nel tuo primo paragrafo. La concorrenza si riferisce alla gestione di più thread di esecuzione, dove il parallelismo è più specificamente, l'esecuzione simultanea di più thread di esecuzione. La concorrenza è il termine più ampio che può comprendere il parallelismo.
Mark H,

7
Sebbene le due parole siano molto simili e possano essere confuse (e spesso lo sono), hanno definizioni diverse: Concorrente = Esistente, in corso o fatto allo stesso tempo. Parallelo = pertinente o pertinente alla prestazione apparente o effettiva di più di un'operazione alla volta, con dispositivi uguali o diversi. Come puoi vedere parallelo, non significa necessariamente simultaneo ma potrebbe sembrare solo concorrente. Alla fine della giornata, le parole sono spesso usate in modo intercambiabile e con n dev è una stanza che probabilmente otterrai n + 1 definizioni;)
Lazzaro

3
@Mehrdad Se hai intenzione di basare le tue definizioni di parole del dizionario sul loro uso nei materiali di marketing, penso che probabilmente ti troverai in qualche modo in svantaggio.
Lazzaro,

6
Sbagliato. Nel contesto della programmazione, la concorrenza è la capacità del tuo codice di essere "composto" in bit di logica che possono essere eseguiti contemporaneamente. Il parallelismo (se combinato con la concorrenza) sta prendendo detto codice ed eseguendolo su una macchina a 100 core.
Frank Radocaj,

2
@FrankRadocaj ha ragione. Contestualmente significa che il programma può essere suddiviso in unità (essenzialmente unità che sono thread) che possono essere eseguite in qualsiasi ordine e hanno un risultato determinato. Parallelo significa che queste unità / thread vengono eseguiti letteralmente contemporaneamente su più processori.

89

In breve,

Per concorrenza si intendono più attività che si avviano, si eseguono e si completano in periodi di tempo sovrapposti, senza un ordine specifico. Il parallelismo si verifica quando più attività O più parti di un'attività unica vengono eseguite letteralmente contemporaneamente, ad esempio su un processore multi-core.

Ricorda che concorrenza e parallelismo NON sono la stessa cosa.

Differenze tra concorrenza e parallelismo

Elenchiamo ora le notevoli differenze tra concorrenza e parallelismo.

La concorrenza è quando due attività possono essere avviate, eseguite e completate in periodi di tempo sovrapposti. Il parallelismo è quando i compiti vengono eseguiti letteralmente contemporaneamente, ad es. su un processore multi-core.

La concorrenza è la composizione di processi in esecuzione indipendente, mentre il parallelismo è l'esecuzione simultanea di calcoli (possibilmente correlati).

La concorrenza riguarda la gestione di molte cose contemporaneamente. Il parallelismo consiste nel fare molte cose contemporaneamente.

Un'applicazione può essere simultanea, ma non parallela, il che significa che elabora più di un'attività contemporaneamente, ma non sono in esecuzione due attività contemporaneamente.

Un'applicazione può essere parallela, ma non simultanea, il che significa che elabora contemporaneamente più attività secondarie di un'attività nella CPU multi-core.

Un'applicazione non può essere né parallela, né concorrente, il che significa che elabora tutte le attività una alla volta, in sequenza.

Un'applicazione può essere sia parallela che simultanea, il che significa che elabora contemporaneamente più attività nella CPU multi-core.

Concorrenza

La concorrenza è essenzialmente applicabile quando parliamo di almeno due attività o più. Quando un'applicazione è in grado di eseguire due attività praticamente contemporaneamente, la chiamiamo applicazione simultanea. Sebbene qui le attività vengano eseguite contemporaneamente, ma essenzialmente NON POSSONO. Sfruttano la funzionalità time-slicing della CPU del sistema operativo in cui ogni attività esegue parte della sua attività e quindi passa allo stato di attesa. Quando la prima attività è in stato di attesa, la CPU viene assegnata alla seconda attività per completarne la parte.

Il sistema operativo basato sulla priorità delle attività, quindi, assegna CPU e altre risorse informatiche, ad es. Memoria; svolta dopo svolta a tutte le attività e dare loro la possibilità di completare. Per l'utente finale, sembra che tutte le attività siano eseguite in parallelo. Questo si chiama concorrenza.

Parallelismo

Il parallelismo non richiede l'esistenza di due compiti. Esegue letteralmente fisicamente parti di attività O più attività, allo stesso tempo utilizzando l'infrastruttura multi-core della CPU, assegnando un core a ciascuna attività o attività secondaria.

Il parallelismo richiede essenzialmente hardware con più unità di elaborazione. Nella CPU single core, potresti ottenere concorrenza ma NON parallelismo.

Metodi asincroni

Questo non è correlato alla concorrenza e al parallelismo, l'asincronia viene utilizzata per presentare l'impressione di tasking simultaneo o parallelo, ma in effetti una chiamata di metodo asincrona viene normalmente utilizzata per un processo che deve fare lavoro lontano dall'applicazione corrente e non vogliamo attendere e bloccare la nostra applicazione in attesa di risposta.


2
Molto utile. Grazie
Neha,

Sono ancora confuso su Async vs concorrenza. Ho visto la frase "eseguire le attività in modo asincrono" e "eseguire le attività contemporaneamente". Eseguire attività asincrone e eseguire attività contemporaneamente sembra significare la stessa cosa?
Moondra,

1
L'attività @Moondra Async viene eseguita su un singolo thread, nulla correlato al multithreading. attività asincrona invia un'attività a un processo esterno esterno all'applicazione ... ovvero database, lettore di file ... questi sono processi IO, quindi viene aggiunto un callback sul processo per eseguire un'azione al termine del processo IO. ciò di cui non sono sicuro è che ci sono alcune caratteristiche "asincrone" in alcuni linguaggi di programmazione che creano un nuovo thread separato quando si chiama un'attività asincrona, ho sentito che C # è uno ma non ne sono sicuro
Tobi Owolawi

56

La concorrenza è quando l'esecuzione di più attività viene intercalata, invece che ciascuna attività viene eseguita in sequenza una dopo l'altra.

Il parallelismo è quando questi compiti vengono effettivamente eseguiti in parallelo.

inserisci qui la descrizione dell'immagine


L'asincronia è un concetto separato (anche se correlato in alcuni contesti). Si riferisce al fatto che un evento potrebbe accadere in un momento diverso (non in sincronia) con un altro evento. I diagrammi seguenti illustrano qual è la differenza tra un'esecuzione sincrona e asincrona, in cui gli attori possono corrispondere a thread, processi o persino server diversi.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


6
Illustrazione semplice ed efficace.
contactmatt

1
la concorrenza è uguale all'asincronia?
nn.

1
Questi 2 concetti sono molto vicini, anzi, ma non uguali. In pratica, l'asincronia è più correlata all'interazione tra le azioni (diciamo A e B), dove una (B) è innescata dall'altra (A) e se la seconda attenderà la prima per il completamento. La concorrenza è un termine più generale per le azioni che possono anche non essere correlate tra loro e se sono eseguite in sequenza o se le loro esecuzioni sono intercalate.
Dimos,

1
Quindi l'asincronia riguarda principalmente il blocco e il non blocco
Daniel

15

Ognuno ha problemi ad associare asincrono al parallelismo o alla concorrenza perché l'asincrono non è un inno al parallelo o simultaneo. È un antonimo di sincrono. Il che indica semplicemente se qualcosa, in questo caso i thread, verrà sincronizzato con qualcos'altro, in questo caso un altro thread.


13

Esistono diversi scenari in cui può verificarsi la concorrenza:

Asincronia : ciò significa che il programma esegue operazioni non bloccanti. Ad esempio, può avviare una richiesta per una risorsa remota tramite HTTP e quindi continuare a svolgere altre attività mentre attende la ricezione della risposta. È un po 'come quando invii un'email e poi vai avanti con la tua vita senza aspettare una risposta.

Parallelismo - Ciò significa che il tuo programma sfrutta l'hardware delle macchine multi-core per eseguire le attività contemporaneamente suddividendo il lavoro in attività, ognuna delle quali viene eseguita su un core separato. È un po 'come cantare sotto la doccia: in realtà stai facendo due cose nello stesso momento.

Multithreading - Questa è un'implementazione software che consente l'esecuzione simultanea di thread diversi. Un programma multithread sembra fare più cose contemporaneamente anche quando è in esecuzione su una macchina single-core. È un po 'come chattare con persone diverse attraverso varie finestre di messaggistica istantanea; anche se in realtà stai passando avanti e indietro, il risultato netto è che stai avendo più conversazioni contemporaneamente.


Queste sono analogie davvero buone! Grazie. Sarebbe giusto dire che la concorrenza può essere definita con la tua definizione multithreading? Quindi concorrenza = multithreading su un single-core che sembra stia accadendo allo stesso tempo, ma sta davvero cambiando avanti e indietro molto rapidamente?
wongz,

3

Concorrenza

Concorrenza significa che un'applicazione sta facendo progressi su più di un'attività contemporaneamente (contemporaneamente). Bene, se il computer ha solo una CPU, l'applicazione potrebbe non avanzare su più di un'attività contemporaneamente, ma all'interno dell'applicazione viene elaborata più di una attività alla volta. Non completa completamente un'attività prima che inizi la successiva.

Parallelismo

Parallelismo significa che un'applicazione suddivide i suoi compiti in sottoattività minori che possono essere elaborate in parallelo, ad esempio su più CPU contemporaneamente.

Concorrenza vs parallelismo nel dettaglio

Come puoi vedere, la concorrenza è correlata al modo in cui un'applicazione gestisce più attività su cui lavora. Un'applicazione può elaborare un'attività alla volta (in sequenza) o lavorare su più attività contemporaneamente (contemporaneamente).

Il parallelismo, d'altra parte, è correlato al modo in cui un'applicazione gestisce ogni singola attività. Un'applicazione può elaborare l'attività in serie dall'inizio alla fine o dividere l'attività in sottoattività che possono essere completate in parallelo.

Come puoi vedere, un'applicazione può essere simultanea, ma non parallela. Ciò significa che elabora più di un'attività contemporaneamente, ma le attività non sono suddivise in attività secondarie.

Un'applicazione può anche essere parallela ma non simultanea. Ciò significa che l'applicazione funziona solo su un'attività alla volta e questa attività è suddivisa in attività secondarie che possono essere elaborate in parallelo.

Inoltre, un'applicazione non può essere né simultanea né parallela. Ciò significa che funziona su una sola attività alla volta e l'attività non viene mai suddivisa in attività secondarie per l'esecuzione parallela.

Infine, un'applicazione può anche essere simultanea e parallela, in quanto funziona su più attività contemporaneamente e suddivide ciascuna attività in sottoattività per l'esecuzione parallela. Tuttavia, alcuni dei vantaggi della concorrenza e del parallelismo potrebbero andare persi in questo scenario, dal momento che le CPU del computer sono già ragionevolmente occupate dalla concorrenza o dal solo parallelismo. La combinazione può comportare solo un piccolo guadagno o addirittura una perdita di rendimento. Assicurati di analizzare e misurare prima di adottare ciecamente un modello parallelo simultaneo.

Da http://tutorials.jenkov.com/java-concurrency/concurrency-vs-parallelism.html


3

Parallelo:È un termine generico che significa che due parti di codice eseguono "contemporaneamente". Non importa se si tratta di un "vero" parallelismo o se è falsificato attraverso un modello di progettazione intelligente. Il punto è che puoi avviare i "compiti" contemporaneamente e controllarli separatamente (con mutex e tutti i trucchi appropriati). Ma di solito preferisci usare la parola "parallelo" solo per "vero" parallelismo, come in: lo fai accadere attraverso il multitasking non cooperativo (che si tratti di core CPU / GPU, o solo a livello software lasciando che il sistema operativo lo gestisca a un livello molto basso). Le persone sono riluttanti a dire "parallelo" solo per un complicato codice sequenziale che simula il parallelismo, come ad esempio potresti trovare nel javascript di una finestra del browser. Da qui il motivo per cui le persone in questo thread dicono "asincrono non ha nulla a che fare con il parallelismo". Bene, ma non confonderli.

Concorrente: non può esserci concorrenza senza parallelismo (simulato o reale, come ho spiegato sopra), ma questo termine si concentra specificamente sul fatto che i due sistemi proveranno ad accedere alla stessa risorsa allo stesso tempo ad un certo punto. Pone l'accento sul fatto che dovrai affrontarlo.

Asincrono : tutti hanno ragione dicendo che l'asincrono non è correlato al parallelismo, ma apre la strada ad esso (l'onere è su di te per rendere le cose parallele o no - continua a leggere).

"Asincrono" si riferisce a una rappresentazione del parallelismo che formalizza le tre cose di base normalmente coinvolte nel parallelismo: 1) definire l'inizializzazione del compito (dire quando inizia e quali parametri ottiene), 2) cosa deve essere fatto dopo che finisce e 3) Cosa dovrebbe continuare a fare il codice tra.

Ma è ancora solo sintassi (di solito è rappresentata come metodi di callback). Dietro la scena, il sistema sottostante potrebbe semplicemente decidere che questi cosiddetti "compiti" sono solo frammenti di codice da accumulare fino a quando non termina il codice che sta attualmente eseguendo. E poi li scompila uno ad uno e li esegue in sequenza. O no. Potrebbe anche creare un thread per attività ed eseguirli in parallelo. Che importa? Quella parte non è inclusa nel concetto;)


2

C'è un po 'di semantica da chiarire qui:

La concorrenza o il parallelismo è una questione di contesa di risorse , mentre Asincrono riguarda il flusso di controllo .

Diverse procedure (o le loro operazioni costitutive ) sono definite asincrone, quando non esiste un'implementazione deterministica dell'ordine della loro elaborazione ; in altre parole, c'è una probabilità che uno qualsiasi di essi possa essere elaborato in un dato momento T. Per definizione, più processori (ad esempio CPU o persone) rendono possibile l'elaborazione di più di essi contemporaneamente; su un singolo processore, la loro elaborazione è interfogliata (ad es. Thread).

Le procedure o operazioni asincrone sono definite simultanee, quando condividono risorse ; La concorrenza è la possibilità definitiva di contesa in un dato momento T. Il parallelismo è banalmente garantito quando non sono condivise risorse (ad es. Processore e storage diversi); in caso contrario deve essere indirizzato il controllo della concorrenza.

Quindi una procedura o un'operazione asincrona può essere elaborata in parallelo o contemporaneamente ad altri.


2

Concorrenza significa eseguire più attività contemporaneamente ma non necessariamente contemporaneamente. Quando devi eseguire più di un compito ma hai una sola risorsa, andiamo per la concorrenza. Nell'ambiente single core la concorrenza è ottenuta tramite il cambio di contesto.

Il parallelismo è come eseguire più di un compito contemporaneamente come se cantassi e facessi il bagno insieme. Ora stai svolgendo un compito in parallelo.

Asincrono è qualcosa correlato all'esecuzione del thread nel modello asincrono quando viene eseguita un'attività, è possibile passare a un'attività diversa senza attendere il completamento della precedente.

La programmazione asincrona ci aiuta a raggiungere la concorrenza. La programmazione asincrona in un ambiente multi-thread è un modo per raggiungere il parallelismo.


2

"Sync e async sono modelli di programmazione. Concorrenti e paralleli sono i modi in cui i compiti vengono eseguiti ...". Fonte: https://medium.com/better-programming/sync-vs-async-vs-concurrent-vs-parallel-5754cdb60f66

In altre parole, sync e asincrono descrivono come viene eseguito il programma quando effettua una chiamata di funzione (attenderà o continuerà ad essere eseguito?), Mentre simultaneo e parallelo descrivono come verrà eseguita una funzione (un'attività) (simultanea = eventualmente eseguita a allo stesso tempo, parallelo = efficacemente eseguito allo stesso tempo).


il mezzo non è una fonte, è un articolo di qualcun altro che parla della sua (cattiva) comprensione di un argomento, non lo rende un'autorità.
Moha, l'onnipotente cammello, il

1
È una citazione, quindi la fonte. La maggior parte delle risposte qui non sono scritte dalle autorità in nessun campo e la spiegazione fornita dall'autore è abbastanza buona.
Pedro Boechat,

A StackOverflow hai almeno un sistema di voto, ed è una comunità di professionisti. Chiunque può scrivere qualsiasi cosa su supporto. Non è un confronto equo tra i due.
Moha l'onnipotente cammello

1
Chiunque può scrivere qualsiasi cosa anche qui, non so perché stai scegliendo su Medium. Ad ogni modo, sono un programmatore professionista e approvo questa comprensione. E lo trovo elegante perché è relativamente corto.
Pedro Boechat il

Il problema non è che Medium è una cattiva fonte, il problema è che una risposta che si collega semplicemente a una pagina esterna non è una risposta. Potresti migliorare notevolmente questa risposta se elaborassi la parte citata o sintetizzassi il contenuto dell'articolo anziché collegarlo semplicemente ad esso.
David Schwartz,

1

CONCORRENZA CONTRO IL PARALLELISMO: la concorrenza in un determinato momento può essere eseguita solo un'attività. esempio: parallelismo singolo processore cpu ad un certo punto possiamo fare più compiti. esempio: processore dual core o multi core


1

Qui spiego con alcuni esempi


Parallelismo

Una GPU utilizza l'elaborazione parallela per elaborare lo stesso blocco di codice ( kernel AKA ) su migliaia di thread fisici e logici. Idealmente, il processo inizia e termina contemporaneamente per tutti i thread. Un singolo core della CPU senza hyperthreading non può eseguire l'elaborazione parallela.

Nota: ho detto idealmente perché quando si esegue un kernel con dimensioni di 7M chiamate su un hardware con thread 6M, deve eseguire due volte lo stesso codice su tutti i thread 6M in parallelo consumando tutti i thread 6M ogni volta.

  • un kernel (un pezzo di codice) viene eseguito su più processori
  • contemporaneamente
  • con una singola sequenza di esecuzione (un kernel deve fare la stessa cosa in tutti i thread, quindi "branching" o "se" sono evitati perché consumeranno drasticamente le risorse creando molti NOP (nessuna operazione) per sincronizzare tutti i thread)
  • essenzialmente aumenta drasticamente la velocità
  • limita drasticamente ciò che puoi fare
  • dipende molto dall'hardware

Nota: il parallelismo non è limitato alla GPU.


Concorrenza

Un servizio Web riceve molte piccole richieste in tempo reale e deve gestire ognuna di queste richieste in modo diverso, in qualsiasi momento e indipendentemente da altre richieste o lavori interni. Tuttavia, si desidera che il servizio Web sia sempre attivo e funzionante senza corrompere lo stato dei dati o l'integrità del sistema.

Immagina un utente che aggiorna un record e un altro utente che elimina lo stesso record contemporaneamente.

  • molte attività vengono eseguite
  • in tempo reale (o ogni volta che arriva una richiesta)
  • con sequenze di esecuzione diverse (a differenza del kernel nell'elaborazione parallela, le attività simultanee possono fare cose diverse, molto probabilmente è necessario accodarle o assegnarle le priorità)
  • migliora sostanzialmente il tempo medio di risposta perché l'attività n. 2 non deve attendere il completamento dell'attività n. 1
  • essenzialmente sacrifica il tempo di calcolo perché molte attività sono in esecuzione contemporaneamente e ci sono risorse limitate
  • deve gestire correttamente le risorse condivise in modo da non incorrere in deadlock o corrompere i dati.

Nota : queste richieste di solito consumano alcune risorse essenziali come memoria, connessione al database o larghezza di banda. Tuttavia, si desidera che il servizio Web sia sempre reattivo. L'asincrono è la chiave per renderlo reattivo , non concorrenziale


asincrono

Un processo pesante (come un'operazione di I / O) può facilmente bloccare la GUI se viene eseguita sul thread della GUI. Al fine di garantire la reattività dell'interfaccia utente , è possibile eseguire un processo pesante in modo asincrono. È meglio eseguire operazioni asincrone simili una alla volta . ad es. più operazioni associate a IO possono essere significativamente più lente se eseguite contemporaneamente, quindi è meglio metterle in coda per iniziare

  • un'attività o una serie di attività viene eseguita su un altro thread
  • Una volta
  • se c'è un compito, allora non c'è sequenza, quindi o aspetti che finisca o spari e dimentichi
  • se si tratta di una serie di attività, allora si spara e si dimentica tutto allo stesso tempo, si attende che tutto finisca oppure si esegue ogni attività fine per iniziare
  • riduce sostanzialmente le prestazioni a causa delle spese generali
  • fornisce reattività a un altro thread (efficace contro il blocco del thread dell'interfaccia utente o di altri thread essenziali)

Nota: un'operazione asincrona che viene eseguita contemporaneamente (cioè più di una volta alla volta) è un'operazione simultanea.


Nota: la concorrenza e l'asincrono sono spesso confuse l'una con l'altra. La concorrenza si riferisce a diverse parti del sistema che lavorano insieme senza interferire tra loro (questi problemi sono spesso risolti con blocchi, semafori o mutex). L'asincrono è il modo in cui ottieni reattività (come il threading).

* Nota: Asincrono e Multithreading sono spesso confusi tra loro. Il codice asincrono non implica necessariamente un nuovo thread. può essere un'operazione hardware o come Stephan lo chiama un'operazione pura, leggi questo

ad esempio nel codice WPF + C # di seguito, await Task.Run(()=> HeavyMethod(txt))risolve un problema di asincrono, mentre textBox.Dispatcher.Invokerisolve un problema di concorrenza:

private async void ButtonClick(object sender, RoutedEventArgs e)
{
    // run a method in another thread
    await Task.Run(()=> HeavyMethod(txt));

    // modify UI object in UI thread
    txt.Text = "done";
}

// This is a thread-safe method. You can run it in any thread
internal void HeavyMethod(TextBox textBox)
{
    while (stillWorking)
    {
        // use Dispatcher to safely invoke UI operations
        textBox.Dispatcher.Invoke(() =>
        {
            // UI operations outside of invoke will cause ThreadException
            textBox.Text += ".";
        });
    }
}

0

Renderò breve e interessante avvolgere la testa attorno a questi concetti.

Concorrente o parallelo - I modi in cui vengono eseguite le attività.

Fai un esempio nella vita reale: c'è una sfida che richiede sia di mangiare un'intera torta enorme sia di cantare un'intera canzone. Vincerai se sei il più veloce che canta l'intera canzone e finisce la torta. Quindi la regola è che canti e mangi contemporaneamente . Come lo fai non appartiene alla regola. Puoi mangiare l'intera torta, quindi cantare l'intera canzone, oppure puoi mangiare mezza torta, quindi cantare mezza canzone, quindi farlo di nuovo, ecc.

Il parallelismo è un tipo specifico di concorrenza in cui i compiti vengono realmente eseguiti simultaneamente. Nell'informatica, il parallelismo può essere raggiunto solo in ambienti multicore.

Synchronous vs. Asynchronous - Modelli di programmazione.

In sincronia, scrivi il codice come passaggi che vengono eseguiti in ordine, dall'alto verso il basso. In un modello di programmazione asincrono, si scrive il codice come attività, che vengono quindi eseguite contemporaneamente. L'esecuzione simultanea significa che probabilmente tutte le attività vengono eseguite contemporaneamente.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.