函数回调和进程间通信是否相同?

时间:2012-05-15 07:56:58

标签: c operating-system function-pointers inter-process-communicat

几天前,在一次采访中,一个问题被问到我,

Are  function callback in C and interprocess communication are same?

我在这个问题上有点中立。因为我处于两难境地。在IPC中,如果我们看到流程只是一个功能,我们会在流程与流程之间进行通信。这里有一个函数调用其他函数。在函数回调中,我们再次使用function pointer,这是一个函数调用带地址的其他函数。 所以只是想知道它们并不完全相同,那有什么区别呢?

2 个答案:

答案 0 :(得分:10)

不,不是真的。

函数回调是将函数的地址(或其他标识符)传递给另一个函数,以便它可以出于某种原因回调。

经典示例是C标准库qsort函数。传入指向数组的指针(及其大小)以及比较函数。然后qsort函数使用该比较函数(回调)来决定列表中任何两个元素中的哪一个更大,以便它可以按顺序排列它们。

另一方面,IPC是一种进程相互通信的手段,例如共享内存,管道,信号量等。

某些IPC机制可能使用回调,但这绝不是必要的。例如,套接字不使用回调,它们只允许用户拨打readwrite

与共享内存类似,您可以附加到内存块,只需访问它们就像“常规”内存一样,只是在连接到内存的所有进程中感受到效果。

使用回调的一种是ONC RPC(或Sun RPC)。它运行一个服务器,通过网络等待客户端调用,并将它们传递给预先配置的客户端功能。可以找到更多详细信息here

但即便如此,我还是会犹豫是否将它称为回调,因为它确实是在编译时配置的。 “适当的”回调往往是在运行时完成的。

答案 1 :(得分:6)

函数回调意味着调用者和被调用者在同一个线程中。 IPC处于不同的流程中。进程由一个或多个线程组成。问题,回调不是IPC。