6

qualche giorno fa, in un'intervista a una domanda è stato chiesto a me come,La funzione callback e la comunicazione tra processi sono uguali?

Are function callback in C and interprocess communication are same? 

ero po 'neutrale che question.Because ero in un dilemma. In IPC comunichiamo tra processo per elaborare alla fine se vedremo che il processo non è altro che una funzione. Qui una funzione chiama un'altra funzione. Nella funzione callback usiamo ancora function pointer che è una funzione che chiama un'altra funzione con indirizzo. Quindi volevo solo sapere se non sono completamente uguali, quindi qual è la differenza?

risposta

10

No, non proprio.

La richiamata di funzione sta passando l'indirizzo (o qualche altro identificatore) di una funzione a un'altra funzione in modo che possa richiamare per qualche motivo.

L'esempio classico è la libreria standard C qsort. Si passa un puntatore all'array (e alle sue dimensioni), insieme a una funzione di confronto. La funzione qsort utilizza quindi tale funzione di confronto (il callback) per decidere quale dei due elementi nell'elenco è maggiore in modo che possa organizzarli in ordine.

IPC, d'altra parte, è un mezzo per i processi di comunicare tra loro, ad esempio memoria condivisa, pipe, semafori e così via.

Alcuni meccanismi IPC possono utilizzare i callback ma non è assolutamente necessario. Ad esempio, i socket non utilizzano le richiamate, ma consentono semplicemente a un utente di chiamare read e write.

Analogamente alla memoria condivisa, si allega ai blocchi di memoria e si accede semplicemente ad essi come la memoria "normale", è solo che gli effetti si avvertono su tutti i processi collegati a quella memoria.

Uno che fa tipo di callback di utilizzo è ONC RPC (o Sun RPC). Gestisce un server che attende le chiamate dei client attraverso la rete e le passa a una funzione client preconfigurata. Maggiori dettagli possono essere trovati here.

Ma, anche in questo caso, sarei titubante a chiamarlo come richiamata poiché è davvero configurato in fase di compilazione. I callback "corretti" tendono ad essere eseguiti in fase di esecuzione.

+1

+1 non ha battuto questa (versione di questo) risposta in semplicità e completezza –

+0

@paxdiablo: Funzione callback: -Alcune ragioni significa ottenere alcuni dati ... quindi lo stesso che stiamo ottenendo da IPC utilizzando socket o pipe e tutti –

+0

"Alcuni meccanismi IPC possono utilizzare le callback ma non è assolutamente necessario." - Sarebbe bello se questo potesse essere elaborato. – Jay

6

Una funzione di richiamata indica che il chiamante e il destinatario si trovano nello stesso thread. IPC è in diversi processi. un processo è composto da uno o più thread. Ergo, le richiamate non sono IPC.