2015-04-17 33 views
9

Inizialmente ho cercato in StackOverflow e google per un tipo simile di domanda. Solo un link ha dato alcuni punti, ma non riesco a capire chiaramente. [1]Differenza tra programma multithreading e async in C#

Le seguenti domande mi perseguita:

  1. Nella programmazione asincrona, qual è il metodo di richiamata reale? è il delegato ?

  2. L'implanto del programma asincrono utilizza thread multipli?

Se fornito con una grafica di spiegare, sarei molto grato


[1] "Difference between Multithreading and Asynchronous programming"

+3

_Asynchronous_ fa ** not ** implica sempre multi-thread. _ [... Ma un sistema asincrono a thread singolo verrà sempre eseguito con interleaving, anche su un sistema multiprocessore.] (Http://cs.brown.edu/courses/cs168/f12/handouts/async.pdf) _ - Brown University. La differenza è quella della concorrenza – MickyD

+1

C'è un buon articolo su codeproject, pls rimanda al collegamento, http://www.codeproject.com/Articles/14931/Asynchronous-Method-Invocation – Shyju

+0

@Shyju Penso che questo sia proprio quello che voglio , così facile da capire. Grazie mille. – yubaolee

risposta

2

1) Una callback è fondamentalmente un delegato passato in una procedura che che la procedura "richiamerà" in un punto appropriato. Ad esempio, in chiamate asincrone come WebRequest.BeginGetResponse o un'operazione BeginXxx di WCF, si passa un AsyncCallback. L'operatore "richiamerà" qualunque metodo tu passi come AsyncCallback, in questo caso quando è finito per farti sapere che è finito e per ottenere il risultato.

2) Il multithreading è parti diverse di un programma in esecuzione, chiamato tipicamente thread.

La programmazione asincrona utilizza i thread per dare il via a un pezzo di codice. Quindi la programmazione asincrona si basa sul multithreading per funzionare. Fare riferimento al link sottostante:

Async Programming and Multi Threading

Difference between Multithreading & Async Prograaming

+0

Quanto è vero? Leggendo i documenti forniti nel commento della domanda, sembra che async non faccia affidamento sul multithreading ... – KansaiRobot

0
  1. programmazione asincrona è la capacità di eseguire un pezzo di codice parallelo al flusso del programma principale. Può trattarsi di chiamate al servizio Web o di qualsiasi attività nell'applicazione corrente in esecuzione. La callback è un metodo denominato o anonimo che può essere rappresentato rappresentato da un delegato. Il callback può tornare con un risultato o un'eccezione. Poiché i risultati dei metodi asincroni vengono restituiti in qualsiasi momento, se vengono interrogati i risultati dei metodi asincroni, il thread di esecuzione corrente verrà bloccato finché il metodo non ritorna con eccezione o risultato. .Net 3.0 usato BackgroundWorker, BeginInvoke/EndInvoke e IAsyncResult. (Ancora in uso) .net 4.0 ha Tasks .net 4.5 ha async await per raggiungere questo

  2. chiamate asincrone sono impletmented con multithreading. In base all'implementazione, ad esempio se le attività vengono utilizzate per eseguire operazioni in modo asincrono che utilizzano thread di threadpool, il framework determinerà se il codice verrà eseguito sul thread corrente o richiederà nuovi thread.

0

La differenza tra il multi-threading e programmazione asincrona è che nel multithreading creiamo un nuovo filo per una funzione per eseguire o compilate solo la funzione o l'attività

programmazione asincrona utilizzare anche multithreading ma nel modo diverso che è in asincrono un'opera o un'attività è divisa in più thread

per esempio se abbiamo 4 compiti se usiamo multithreading e assegnare i fili come segue

Thread1 = task1 
Thread2 = task2 
Thread3 = task3 
Thread4 = task4 

ma quando si usa il modello di programmazione asincrona non dover assegnare i fili

compito vengono automaticamente divisi tra i thread può essere esso uso singolo filo o fili multipli come esso necessità

se sarà utilizzare filo singolo quindi compito 1-4 lavorerà contemporaneamente

in modo round robin

l'interruttore CPU tra compito, avviare un'operazione eseguita per fe w secondi, quindi salva la posizione "commutazione contesto", quindi avvia un'altra attività. questo accada così rapidamente e sembrare illusione che tutte le attività sono in esecuzione allo stesso tempo

simile quando abbiamo più thread nel modello asincrono

un unico compito è quello di gestire con filettatura a più ad esempio, se task1 viene avviato Thread1, può essere eseguito su Thread2 o thread3 quando Thread1 non funziona su task1

Questa è la bellezza di programmazione asincrona

credo che la sua la migliore spiegazione per i principianti

https://codewala.net/2015/07/29/concurrency-vs-multi-threading-vs-asynchronous-programming-explained/#comment-21276

2

Single Threaded Blocco

Per capire asincrono/concorrente/multi-threaded che dobbiamo iniziare con il maggior numero di basi e perché aggiungiamo tanto la complessità della questione.

All'inizio esistevano solo applicazioni con blocco singolo. Questi sono programmi davvero semplici, e più che probabile, questi sono ciò che stai scrivendo in questo momento.

Per spiegare, userò un'analogia di una pizzeria.

Immagina che il tuo computer sia una pizzeria con un solo dipendente. Ha solo avuto una formazione di base.

Entrate nel negozio, parlate con il dipendente, guardate il menu e ordinate una pizza.

Grande. Il dipendente entra nella parte posteriore del negozio, mette una pizza negli oltre e si trova accanto al forno aspettando che la pizza cucini.

Ti ricordi che a tua moglie non piacciono gli ananas. Urli al dipendente che cerca di attirare la sua attenzione per cambiare il tuo ordine. Niente da fare. Non si muoverà dal forno (si addormenta).

Ti arrabbi e parti.

multi-threaded Concurrent Blocco

Si va al prossimo negozio di pizza.

Ha 4 dipendenti.

Entrate nel negozio, parlate con il dipendente, guardate il menu e ordinate una pizza.

Lui grida (invia un messaggio) agli altri dipendenti nella parte posteriore per farti una pizza. Ne mettono uno nel forno. Sta in piedi vicino al forno e dorme.

Hai dimenticato che tua moglie ha delle allergie al bacon. Dì al dipendente A di cancellare la pizza. Lui urla dentro al cuoco, lo sveglia. Il cuoco getta la pizza nel cestino e mette una pizza Kosher nel forno. Si riaddormenta prontamente.

Aspetta, la pizza è pronta, ottieni un conto. È enorme (assolda troppo personale e metà di loro dormono nel lavoro).

Single Threaded asincrono/non-blocking

Si va al prossimo negozio di pizza.

Ha 1 dipendente.

Entrate nel negozio, parlate con il dipendente, guardate il menu e ordinate una pizza.

Cammina dentro, mette una pizza nel forno. Quindi allega la ricevuta (callback) alla pizza. Torna indietro al bancone.

Ti ricordi che tua moglie in realtà non mangia carne questo mese. Dillo al dipendente, lui entra, risolve la situazione.

Dopo che il dipendente ha controllato all'interno per una pizza fatta. Poi legge la ricevuta (consegna questa pizza a Bob).

Ottiene pizza economica a prezzi accessibili e reattiva.

Problemi correlati