2017-02-04 5 views
0

私たちが知っているのは:なぜboost :: aioがその実装がepollに基づいているのか(同期)

(1)epollはユーザクエリ/システム通知に基づいて同期しています。 whileループはすべてのfdを呼び出すために使用されます。

(2)boost :: asio自身が "非同期"であると宣言していますが、Linuxでの実装はepollを使用しています。

私の質問は、 "syn"システムコールを使って "asyn"をどのように実装できますか?カーネル/システムでサポートされているaioインターフェイスを使用していない限り、右ですか?

私の混乱を修正するのを手伝ってください。ありがとう!

答えて

1

"同期"は、通常、制御が完了するまで制御を呼び出し元に戻さない操作を指します。

epollは、操作(保留中の完了/アクションによるfdsの返却)が返されるまでに完了するという意味で同期しています。

しかし、ソケットからの読み取りまたは書き込みは、関数呼び出しが返っても読み取りまたは書き込みの操作がまだ完了していないという意味ではまだ非同期です。実際のI/O作業は非同期で実行され、完了したらepollが通知します。あなたがepollに電話するかどうかにかかわらず作業は実行されますが、epollは、作業を実行する機能ではなく、完了を返信するメカニズムに過ぎません。

+0

"実際のI/O作業は非同期で行われます" => "実際のI/O作業*は非同期で行われるかもしれない" –

関連する問題