私はGHCの新しいIOマネージャーについて読んできました.GHCは、非同期イベント通知を使用し、I/Oを阻止して高いスループットを達成することを避けています。GHC IOマネージャはどのIOアクティビティをサポートしていますか?
新しい非同期IOコードによって管理できるIOアクティビティはどれですか?ファイルやネットワーク活動の読み書きデータベースアクセス?管理者がブロッキングに頼らざるを得ない種類のIOがありますか?
私はGHCの新しいIOマネージャーについて読んできました.GHCは、非同期イベント通知を使用し、I/Oを阻止して高いスループットを達成することを避けています。GHC IOマネージャはどのIOアクティビティをサポートしていますか?
新しい非同期IOコードによって管理できるIOアクティビティはどれですか?ファイルやネットワーク活動の読み書きデータベースアクセス?管理者がブロッキングに頼らざるを得ない種類のIOがありますか?
epoll
/kqueue
で管理できるファイルディスクリプタはすべて対象です。 I/Oの非同期治療をしたいライブラリがシステムコール再試行する前にGHC.Conc
でthreadWaitRead
とthreadWaitWrite
関数を呼び出すファイルディスクリプタノンブロッキング作り、そして
EWOULDBLOCK
。これはすでにHandle
とSocket
タイプで行われています。たとえば、 Cデータベースライブラリへのバインディングは、そのライブラリがI/Oマネージャと連携しないため、ブロック動作を行います。
「tibbe」はおそらく*この分野の人を知っていることに気づくかもしれません:) –
やや満足のいく答え:
新しいGHC IOマネージャーの心はkqueue()/epoll()
イベントループです。だから私はこれの上に構築することができるものは、適格であると期待します。特に、これは意味:
コード(私は数ヶ月前にそれを見て、物事が変更されている場合があります)また、各種のタイムアウトを登録し、実行するためのサポートが含まれています優先度(検索)キューを介して種類を指定します。これは、ほとんどのsleep
のような呼び出しは、インターフェイス上でピギーバックすることができることを示唆しています。
データベースアクセスについて:ネットワークIOソケットを介してデータベースに頻繁にアクセスするので、別のスレッドでforkIO
を呼び出してDBアクセスを行うことは、実行可能で、速く、安全でなければなりません。アプリケーションの残りの部分にデータを返信するには、並行処理手段の1つ、Chan
またはSTM.TChan
を使用します。
私は、管理者がブロック自体に頼らざるを得ない種類のIOがあるとは思っていませんが、いくつかのライブラリが新しいIOマネージャを迂回して頚動脈にまっすぐ進むかもしれません。彼らはもちろん、ブロックするでしょう。
ワウ... 4つのお気に入りですが、アップヴォートは1つだけです。それは奇妙だ。 – fuz
@FUZxxl StackOverflowはお気に入りのものがありますか?私は全くあなたのコメントのために気づいた。 – alternative
@monadicはい、あります。お気に入りの質問のすぐ下にあるスタートボタンを押してください。何か変更があった場合、あなた自身の質問であるかのように通知を受け取ります。 – fuz