6

twisted および node.js フレームワークがどのように機能するかを調べていて、オペレーティング システムがコールバックを使用して I/O 操作をどのようにサポートしているかを正確に理解しようとしています。

I/O 操作を待機しているスレッドをブロックする必要がないため、必要なスレッドが少なくなるので、これは良いことだと理解しています。ただし、I/O が終了したら、何かがコールバックを呼び出す必要があります。

これはオペレーティングシステムによってどのように実装されていますか?

4

2 に答える 2

5

1 つのアプローチは、関連するデータ構造へのコールバックを待っている人に関する情報を OS に添付させることです。たとえば、読み取り通知を待っているファイル記述子に相当するカーネル内のものなどです。そのファイル記述子に何かが発生すると、OS はウェイターをスキャンして、通知する必要があるかどうかを確認します。そうする必要がある場合は、そうします。これの 1 つの実装については、FreeBSD のkqueueメカニズムを紹介する Lemon の論文で読むことができます。特に、セクション 6、「実装」、サブセクション 3 および 4、「イベント ソースのアクティビティ」、および「配信」を参照してください。

于 2010-10-28T21:09:38.067 に答える
3

これは、 epoll、poll、kqueue、select などの「I/O イベント通知機能/インターフェース」を使用することで、OS で解決されます。

上記の「通知システム」がどのように使用されるかの具体的な例については、deft、特にそのio/event ループを見てください。( java.nio.channels.Selectorは、これを抽象化する Java nio の方法です。)

免責事項:私は巧みなコミッターです

于 2010-10-28T20:46:00.350 に答える