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

Ras*_*yak 6 c operating-system function-pointers inter-process-communicat

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

Are  function callback in C and interprocess communication are same?
Run Code Online (Sandbox Code Playgroud)

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

pax*_*blo 10

不,不是真的.

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

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

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

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

与共享内存类似,您可以附加到内存块并简单地访问它们与"常规"内存非常相似,只是在连接到该内存的所有进程中感受到效果.

一说确实有点使用回调是ONC RPC(或Sun RPC).它运行一个服务器,通过网络等待客户端调用,并将它们传递给预先配置的客户端功能.更多细节可以在这里找到.

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


Yus*_*f X 6

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