7

数日前、インタビューで1つの質問が私に尋ねられました。

Are  function callback in C and interprocess communication are same?

私はその質問に少し中立でした。私はジレンマにあったからです。IPCでは、プロセスが機能に他ならないことがわかる場合、最後にプロセス間で通信します。ここでは、1つの関数が他の関数を呼び出します。関数コールバックfunction pointerでは、1つの関数がアドレスを使用して他の関数を呼び出すということを再度使用します。完全に同じではありませんが、知りたかったのですが、違いは何ですか?

4

2 に答える 2

12

いいえ、そうではありません。

関数コールバックは、関数のアドレス(または他の識別子)を別の関数に渡して、何らかの理由でコールバックできるようにします。

古典的な例は、C標準ライブラリqsort関数です。比較関数とともに、配列(およびそのサイズ)へのポインターを渡します。次に、qsort関数はその比較関数(コールバック)を使用して、リスト内の2つの要素のどちらが大きいかを判断し、それらを順番に並べ替えることができます。

一方、IPCは、共有メモリ、パイプ、セマフォなど、プロセスが相互に通信するための手段です。

一部のIPCメカニズムはコールバックを使用する場合がありますが、必ずしも必要ではありません。たとえば、ソケットはコールバックを使用せず、ユーザーがとを呼び出すことを許可するだけreadですwrite

共有メモリの場合と同様に、メモリブロックに接続して、「通常の」メモリとほとんど同じようにアクセスします。そのメモリに接続されているすべてのプロセスで効果が感じられるだけです。

ある種のコールバックを使用するの、ONC RPC(またはSun RPC)です。これは、ネットワークを介したクライアント呼び出しを待機するサーバーを実行し、それらを事前構成されたクライアント関数に渡します。詳細については、こちらをご覧ください

しかし、それでも、コンパイル時に実際に構成されているため、コールバックと呼ぶのは躊躇します。「適切な」コールバックは実行時に行われる傾向があります。

于 2012-05-15T07:58:36.750 に答える
7

関数コールバックは、呼び出し元と呼び出し先が同じスレッドにあることを意味します。IPC は異なるプロセスにあります。プロセスは 1 つ以上のスレッドで構成されます。したがって、コールバックは IPC ではありません。

于 2012-05-15T08:01:50.907 に答える