6

Pocos días atrás, en una entrevista de una pregunta se hizo a mí como,¿La devolución de llamada de función y la comunicación entre procesos son las mismas?

Are function callback in C and interprocess communication are same? 

yo era poco neutral en el que question.Because yo estaba en un dilema. En IPC nos comunicamos entre procesos para procesar al final si veremos que el proceso no es más que una función. Aquí una función llama a otra función. En la función de devolución de llamada usamos function pointer nuevamente, que es una función que llama a otra función con dirección. Así que solo quería saber, aunque no son completamente iguales, ¿cuál es la diferencia?

Respuesta

10

No, realmente no.

La devolución de llamada de la función pasa la dirección (u otro identificador) de una función a otra función para que pueda volver a llamar por algún motivo.

El ejemplo clásico es la biblioteca estándar C qsort función. Pasa un puntero a la matriz (y sus tamaños), junto con una función de comparación. La función qsort luego usa esa función de comparación (la devolución de llamada) para decidir cuál de los dos elementos en la lista es mayor para que pueda organizarlos en orden.

IPC, por otro lado, es un medio para que los procesos se comuniquen entre sí, como memoria compartida, tuberías, semáforos, etc.

Algunos mecanismos de IPC pueden utilizar devoluciones de llamada pero de ninguna manera es necesario. Por ejemplo, los sockets no usan devoluciones de llamada, simplemente permiten que un usuario llame al read y al write.

De forma similar con la memoria compartida, se conecta a los bloques de memoria y simplemente accede a ellos de forma muy similar a la memoria "normal", es solo que los efectos se sienten en todos los procesos conectados a esa memoria.

Uno que hace tipo de devolución de llamada de uso es ONC RPC (o Sun RPC). Ejecuta un servidor que espera las llamadas de los clientes a través de la red y las pasa a una función cliente preconfigurada. Más detalles se pueden encontrar here.

Pero, incluso entonces, dudaría en llamar a una devolución de llamada ya que está realmente configurado en tiempo de compilación. Las devoluciones de llamada "adecuadas" tienden a realizarse en tiempo de ejecución.

+1

+1 no pudo vencer esta (versión de esto) la respuesta en simplicidad y exhaustividad –

+0

@paxdiablo: devolución de llamada de función: -Una razón significa obtener algunos datos ... así que lo mismo estamos obteniendo de IPC mediante socket o tuberías y todos –

+0

"Algunos mecanismos de IPC pueden usar devoluciones de llamada, pero de ninguna manera es necesario". - Sería bueno si esto puede ser elaborado. – Jay

6

Una devolución de llamada de función significa que el llamador y el destinatario están en el mismo hilo. IPC está en diferentes procesos. un proceso se compone de uno o más hilos. Ergo, las devoluciones de llamada no son IPC.

Cuestiones relacionadas