【问题标题】:Are function callback and interprocess communication are same?函数回调和进程间通信是否相同?
【发布时间】:2012-05-22 17:03:57
【问题描述】:

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

Are  function callback in C and interprocess communication are same?

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

【问题讨论】:

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


    【解决方案1】:

    不,不是。

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

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

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

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

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

    确实使用回调的一种是 ONC RPC(或 Sun RPC)。它运行一个服务器,等待网络上的客户端调用,并将它们传递给预先配置的客户端功能。更多详情请见here

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

    【讨论】:

    • +1 在简单性和全面性方面无法击败这个(这个版本)答案
    • @paxdiablo: 函数回调:- 某些原因意味着获取一些数据......所以我们通过使用套接字或管道等从 IPC 获取相同
    • “一些 IPC 机制可能会使用回调,但这绝不是必要的。” - 如果能详细说明就好了。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2021-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-05
      • 1970-01-01
      • 1970-01-01
      • 2022-11-02
      • 1970-01-01
      相关资源
      最近更新 更多