7

データベース ポーリング (同期ストアド プロシージャ コール経由) からメッセージ キュー (pub/sub 経由) への切り替えに関する技術的な記事を書いています。データベースのポーリングが、AMQP ブローカーへの接続をセットアップしてメッセージ ハンドラーを構成する場合とは大きく異なり、非常に重いことを説明したいと思います。

誰かがここで説明を提供したり、ソケットで新しいデータが利用可能になったことを通知するときに epoll がどのように機能するかについての優れた高レベルのチュートリアルを教えてもらえますか?

4

1 に答える 1

8

「epollの仕組み」とは、カーネルの観点( 、epoll の実装方法)。

短いバージョンは非常に単純です: に似ていますがpoll、次の 2 つの点が異なります。

  1. 不透明なデータ構造へのハンドルを使用するため、カーネル境界を越えて大量のデータをやり取りすることはありません。
  2. 特定の状況でより効率的なコードを記述できるオプションpoll(特にエッジ トリガーとワンショット通知) がありません。

(また、Linux でのみ動作するという事実もあります。BSD および関連システムにはkqueue、同じ利点を得る方法が大きく異なります。Solaris には/dev/pollなどがあり、一部の *nix には同等のものはありません。移植可能なコードを使用するには、 を使用pollするか、 のような高レベルのライブラリを使用するかlibevent、同等のものをlibevent自分で作成する必要があります。)

と をすでに理解selectしている場合poll、ウィキペディアの記事と参考文献にリンクされているブログの投稿で、知る必要があるほとんどすべての情報が得られ、man ページでギャップが埋められます。

そうでない場合は、まずについて学んでください。そうしてpoll初めて、どのように異なるかを学ぶ意味epollがあります。

これがあなたの主な質問にどのように関係しているかはまだわかりません。データベースファイル、メッセージングepollシステムの基礎、またはLinuxでファイル記述子として表すことができるその他のほぼすべてのことができるので、理解がデータベースのポーリングの違いを説明するのにどのように役立つかわかりません対メッセージ キューのポーリング。もちろん、両者には大きな違いがありますが、イベントをトリガーするメカニズムは違います。inotifypipesocketepoll

于 2012-12-12T19:24:34.810 に答える