几天前,在一次采访中,一个问题被问到我,
Are function callback in C and interprocess communication are same?
我在这个问题上有点中立。因为我处于两难境地。在IPC中,如果我们看到流程只是一个功能,我们会在流程与流程之间进行通信。这里有一个函数调用其他函数。在函数回调中,我们再次使用function pointer
,这是一个函数调用带地址的其他函数。
所以只是想知道它们并不完全相同,那有什么区别呢?
答案 0 :(得分:10)
不,不是真的。
函数回调是将函数的地址(或其他标识符)传递给另一个函数,以便它可以出于某种原因回调。
经典示例是C标准库qsort
函数。传入指向数组的指针(及其大小)以及比较函数。然后qsort
函数使用该比较函数(回调)来决定列表中任何两个元素中的哪一个更大,以便它可以按顺序排列它们。
某些IPC机制可能使用回调,但这绝不是必要的。例如,套接字不使用回调,它们只允许用户拨打read
和write
。
与共享内存类似,您可以附加到内存块,只需访问它们就像“常规”内存一样,只是在连接到内存的所有进程中感受到效果。
使用回调的一种是ONC RPC(或Sun RPC)。它运行一个服务器,通过网络等待客户端调用,并将它们传递给预先配置的客户端功能。可以找到更多详细信息here。
但即便如此,我还是会犹豫是否将它称为回调,因为它确实是在编译时配置的。 “适当的”回调往往是在运行时完成的。
答案 1 :(得分:6)
函数回调意味着调用者和被调用者在同一个线程中。 IPC处于不同的流程中。进程由一个或多个线程组成。问题,回调不是IPC。