7

几天前,在一次采访中,有人问我一个问题,

Are  function callback in C and interprocess communication are same?

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

4

2 回答 2

12

不,不是。

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

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

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

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

与共享内存类似,您附加到内存块并简单地访问它们,就像“常规”内存一样,只是所有附加到该内存的进程都能感受到效果。

一种使用回调的方法是 ONC RPC(或 Sun RPC)。它运行一个服务器,等待网络上的客户端调用,并将它们传递给预先配置的客户端功能。更多细节可以在这里找到。

但是,即使那样,我也不愿将其称为回调,因为它实际上是在编译时配置的。“适当的”回调往往在运行时完成。

于 2012-05-15T07:58:36.750 回答
7

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

于 2012-05-15T08:01:50.907 回答