31

私はGHCの新しいIOマネージャーについて読んでいます。これは、非同期イベント通知を使用し、I/Oのブロックを回避して高スループットを実現します。

新しい非同期IOコードによる管理の対象となるIOアクティビティはどれですか?ファイルの読み取りと書き込み、およびネットワークアクティビティ?データベースアクセス?マネージャーがブロッキングに頼らなければならない種類のIOはありますか?

4

2 に答える 2

26

epoll/で管理できるすべてのファイル記述子kqueueが適格です。I / Oの非同期処理が必要な図書館は、I/Oマネージャーと協力する必要があります。

  • ファイル記述子を非ブロッキングにし、
  • 以前に返されたシステムコールを再試行する前に、threadWaitReadおよびthreadWaitWrite関数を呼び出します。GHC.ConcEWOULDBLOCK

Handleこれは、およびタイプに対してすでに実行されていSocketます。たとえば、Cデータベースライブラリへのバインディングを使用すると、そのライブラリはI / Oマネージャと連携しないため、ブロック動作が発生します。

于 2010-12-16T07:55:24.940 に答える
5

やや満足のいく答え:

新しいGHCIOマネージャーの中心は、kqueue()/epoll()イベントループです。したがって、これに基づいて構築できるものはすべて適格であると期待します。現在ではない場合は、後で。特にこれは次のことを意味します。

  • ファイルIO
  • ネットワークIO

コード(数か月前に調べたところ、状況が変わった可能性があります)には、優先(検索)キューを介したさまざまな種類のタイムアウトの登録と実行のサポートも含まれています。これは、ほとんどのsleepような呼び出しがインターフェイスに便乗している可能性があることを示しています。

データベースアクセスについて:確かに、ネットワークIOソケットを介してデータベースにアクセスすることが多いためforkIO、別のスレッドでDBアクセスを呼び出して実行することは、実行可能で、高速で、安全である必要があります。アプリケーションの残りの部分へのデータの通信は、同時実行手段の1つ、Chanまたはを使用して実行できますSTM.TChan

マネージャーがそれ自体をブロックすることに頼らなければならない種類のIOはないと思いますが、一部のライブラリは新しいIOマネージャーを迂回して、直進する可能性があると想像できます。もちろん、彼らはブロックします。

于 2010-12-15T15:08:01.383 に答える