Che cosa significa per software, librerie e lingue essere asincroni?

6

Con il popolare software in uscita oggi come Node.js , Celery , Twisted , e altri che si vantano di essere asincroni, cosa significa?

Ho seguito le esercitazioni di base su Node.js e scritto alcuni script Node.js, ma non mi sento ancora a mio agio con l'argomento. Si prega di notare che non ho avuto alcuna introduzione formale all'argomento.

  1. Come funziona esattamente il software asincrono?
  2. Quali sono i pro e i contro?
  3. Che cosa sono i callback?
  4. Infine, come funziona un server Web sincrono rispetto a un server Web asincrono?
posta Corey Farwell 30.08.2011 - 23:44
fonte

5 risposte

8

Wikipedia potrebbe essere un buon punto di partenza per alcuni concetti generali e informazioni di base.

Questa citazione da quella pagina lo riassume, ma probabilmente ha bisogno di un po 'di conoscenza per capirlo appieno.

In programming, asynchronous events are those occurring independently of the main program flow. Asynchronous actions are actions executed in a non-blocking scheme, allowing the main program flow to continue processing.

Quindi, con la programmazione sincrona l'utente avvia un'azione sul programma, ma deve attendere che l'operazione venga completata prima di poter fare qualsiasi altra cosa. Un esempio potrebbe essere il salvataggio di un file su disco, non è possibile fare altro finché il file non viene salvato.

Con la programmazione asincrona l'utente avvia un'azione, ma può continuare a svolgere altri lavori mentre l'operazione viene completata. Il programma notifica quindi all'utente in qualche modo che è finito. Un esempio qui potrebbe essere la stampa di un documento. Qui si avvia la stampa quindi (dopo alcune impostazioni) è possibile continuare mentre il documento viene inviato alla stampante. Ricevi una sorta di notifica che la stampa è completa.

Le applicazioni asincrone si affidano ai processi figli multithreading o spawning che svolgono il lavoro.

Le callback sono un meccanismo in cui il codice chiamante può fare qualcosa quando l'operazione asincrona è completa. Registrerai la callback con il processo a lunga esecuzione in qualche modo poi, una volta completato, il codice definito dal callback verrà eseguito.

    
risposta data 30.08.2011 - 23:57
fonte
1
  • L'accesso sincrono avviene quando una chiamata recupera * alcuni * dati, la recupera e la restituisce direttamente
  • L'accesso Asincrono avviene quando viene inoltrato un querry per recuperare i dati e i dati vengono recuperati in una funzione di callback passata nella chiamata iniziale

La differenza fondamentale è che nel caso dell'accesso asincrono non si sa con certezza quando arriveranno i dati e se arriverà anche.

Il vantaggio principale dell'accesso asincrono è che si evitano ritardi nell'attesa che la connessione di rete o il database funzionino o qualsiasi altra cosa che potrebbe rallentare o addirittura bloccare il codice client. Lo svantaggio principale è la complessità aggiunta e il fatto che non si può fare affidamento sui dati in arrivo e questo deve riflettersi nel codice. Tuttavia, utilizzando l'accesso asincrono, è possibile definire un periodo di timeout sul lato client ed emettere un errore dopo il timeout e fare ancora qualcosa durante l'attesa dei dati (come ad esempio mostrare una clessidra).

Se è ancora una domanda, tutte le chiamate di funzione diretta sono sincrone. Sono sicuro che conosci i vantaggi e gli svantaggi delle chiamate sincrone.

    
risposta data 30.08.2011 - 23:52
fonte
0

Ho appena trascorso le ultime settimane a implementare una manciata di servizi web asincroni. Ecco l'idea generale:

La messaggistica sincrona è il modello "standard". Il client invia una richiesta al server, quindi attende che il server invii una risposta. È molto più semplice da programmare, su entrambe le estremità, ma ha lo svantaggio che il client verrà bloccato fino a quando non riceverà una risposta.

La messaggistica asincrona è un po 'più coinvolta. Il client invia una richiesta al server e il server risponde con una conferma. (Non una risposta, ma un "Sì, ho ricevuto la tua richiesta e mi occuperò di esso quando posso.") Il server memorizza la richiesta da qualche parte, come in una coda. Quando il server è pronto, elabora la richiesta e invia la risposta al client, che deve essere in grado di ricevere messaggi in entrata, e deve esserci un modo per associare questo messaggio di risposta alla richiesta che ha inviato in precedenza, nel caso in cui nel frattempo ha inviato più di una richiesta.

È molto più coinvolto, ma impedisce al client di bloccarsi e di doversi preoccupare di timeout, ecc.

    
risposta data 30.08.2011 - 23:50
fonte
0

SearchNetworking.com ha questa spiegazione:

In computer programs, asynchronous operation means that a process operates independently of other processes, whereas synchronous operation means that the process runs only as a result of some other process being completed or handing off operation. A typical activity that might use a synchronous protocol would be a transmission of files from one point to another. As each transmission is received, a response is returned indicating success or the need to resend. Each successive transmission of data requires a response to the previous transmission before a new one can be initiated.

Wikipedia ha un riepilogo del callback anche se non dimenticare che il contesto può essere importante qui come in alcuni casi in cui un callback è visualizzato in modo diverso rispetto a un postback.

Immagina un programma che contiene 3 numeri e restituisce la mediana di quei numeri. Ci sono alcune operazioni per un programma di questo tipo: Ottieni i 3 numeri da parte dell'utente, ordina i numeri per trovare il valore medio e visualizza il risultato. Questo deve essere fatto nell'ordine in quanto non è stato possibile ordinare prima di avere i valori e non è possibile restituire il risultato finché non viene calcolato.

    
risposta data 30.08.2011 - 23:57
fonte
0

So, how exactly does asynchronous software work?

Avendo una chiamata o una richiesta di ritorno più o meno immediatamente, ma senza un valore di ritorno o una risposta, che viene invece inviata in un secondo momento.

What are the pros and cons?

Pro: la chiamata non blocca. Se il chiamante è single-thread, questo gli consente di fare qualcos'altro nel frattempo. Se è multithreading ma con un overhead significativo per thread, potrebbe richiedere meno risorse.

Con: è un modello di programmazione più complesso. Più difficile da imparare, più facile da fare errori.

What are callbacks?

Le parti di codice che trattano la risposta.

Lastly, how does a synchronous web server perform vs. an asynchronous web server?

Dipende dalla piattaforma sottostante e dalle richieste dell'applicazione che viene eseguita. L'aspettativa generale è che un server asincrono è più adatto a gestire un gran numero di richieste, specialmente quando richiedono un piccolo calcolo ma potrebbe dover aspettare qualcos'altro (come una richiesta DB) prima che possano essere completate.

Come avvertimento contro le affermazioni sul blanket: Java nio è il modo in cui Java fa il networking asincrono. Ma ci sono alcune buone prove che potrebbero effettivamente peggiorare rispetto al semplice vecchio semplice blocco IO per la maggior parte delle app su JVM moderne (in parte perché queste sono diventate molto migliori nell'affrontare un sacco di thread).

    
risposta data 31.08.2011 - 00:09
fonte

Leggi altre domande sui tag