Callback senza concorrenza? [chiuso]

0

Per sincronizzare i termini, fornirò la mia prospettiva su ciò che una funzione di callback nei termini più semplici possibili:

A callback function is a function that is executed as a response to a certain event that can happen at arbitrary time.

Il event that can happen at arbitrary time. implica che qualche fonte esterna sta producendo l'evento che implica che alcune esecuzioni devono essere simultanee.

Esiste un significato dietro la funzione di callback che indica qualcosa in un ambiente non concorrente?

    
posta TheMeaningfulEngineer 21.04.2016 - 19:13
fonte

4 risposte

3

Sì, se la tua sorgente "esterna" è in realtà un altro codice eseguito in un singolo programma (non affatto raro, a proposito), la callback avviene quando l'altro codice sceglie di usarlo, ad esempio visitando qualcosa.

FWIW, Wikipedia dice qui :

In computer programming, a callback is a piece of executable code that is passed as an argument to other code, which is expected to call back (execute) the argument at some convenient time. The invocation may be immediate as in a synchronous callback, or it might happen at a later time as in an asynchronous callback. In all cases, the intention is to specify a function or subroutine as an entity that is, depending on the language, more or less similar to a variable.

Direi che se usi il termine callback, senza dire sincrono o asincrono, deduco un callback sincrono, a causa della prospettiva storica e della cronologia sovraponderata della programmazione a thread singolo.

Anche una callback asincrona non implica necessariamente multi-threading o simultaneità; Wikipedia dice che i callback asincroni e differiti vengono semplicemente eseguiti in un secondo momento, non necessariamente contemporaneamente.

Direi che quando hai simultaneità o multi-threading dovresti probabilmente usare il callback del termine task over (asincrono).

    
risposta data 21.04.2016 - 19:32
fonte
1

No, non assume la concorrenza. Infatti, in JavaScript, non c'è concorrenza. A un livello molto alto, il modo in cui i sistemi che utilizzano gli eventi in un singolo sistema con thread potrebbe apparire più o meno come questo:

while forever:
      if there are conditions that produce events
           add events to the event queue

      if there are events in the event queue
           take highest priority event off of event queue
           call callback for event
      otherwise
           wait some very short time period
    
risposta data 21.04.2016 - 19:32
fonte
0

La definizione che date sullo sfondo giallo è priva di significato e non trasmette affatto il significato di una richiamata. Una richiamata è proprio ciò che la parola implica, richiama (al chiamante / cliente / iniziatore). E il suo scopo è quello di consentire al chiamante / client / iniziatore di rispondere agli eventi che accadono prima che la funzione chiamata abbia finito.

Un uso pratico è l'enumerazione degli oggetti. Supponiamo che tu abbia una funzione ReadFile () che passa attraverso un file e ogni volta che incontra qualcosa di interessante che deve essere elaborato, lo segnala al suo chiamante, chiamando la funzione di callback che gli è stata passata. Non ha nulla a che fare con il threading, infatti, le callback vengono in genere utilizzate per evitare il threading.

    
risposta data 22.04.2016 - 08:20
fonte
0

La documentazione di qualsiasi funzione o metodo che utilizza i callback dovrebbe descrivere come verrà utilizzata la callback (a meno che non sia ovvio).

Per i metodi sincroni, una callback viene spesso eseguita mentre il metodo stesso è ancora in esecuzione, come parte dell'esecuzione del metodo.

Per i metodi asincroni che restituiscono immediatamente, il callback verrà spesso chiamato a lungo dopo che il metodo è ritornato, e dovrebbe essere documentato se verrà eseguito su un thread in background, su un thread specifico o sul thread principale del applicazione.

    
risposta data 22.04.2016 - 10:21
fonte