2017-06-23 3 views
3

私はちょうど私が変更のためにファイルをポーリングしていたいくつかのpythonコードを書き直す予定でした。私はasyncioのための練習としてそれを書き直したいと考えていました。概念的なアイデアは、ブロックされないファイルの読み取りを行うことでした。データが利用可能になると、イベントループはコルーチンの実行を継続します。どのようにソケットの読み取りとファイルの読み取りは異なるのですか?

次に、私は非同期ファイル操作が何かではないことを発見しました。 ref.

しかし、私はこの振る舞いの動機が何であり、どのようにソケットと違うのかは理解できませんでした。

ソケットの例:データの準備ができるまで、コルーチンからのソケット収量を読む

。 インターネット上の から非決定的な時間に実際に到着したことを意味します。

なぜ、ファイル読み込み用:データの準備ができるまで、コルーチンからのファイルの収量を読む

を。レディ それは実際にどこか コンピュータのハードディスク

  • からの非決定的な時間に到着した意味これは、呼び出しをブロックすると十分に機能レガシーコードから継承された行動ですか?

  • Character vs Blockファイルとは何か関係ありますか?

  • キャラクターデバイスファイルはどうですか?UART接続を表すファイルはどうですか?ファイルIOもここには適用されませんか?

答えて

1

完全に回答ではありませんが、コメントには大きすぎる考えがあります。

  • 非同期プログラミングは当初、ネットワークシステム/ソケットで最も有用でした。 1つのファイルが100kオープンしているのはめったにありませんが、すべてのファイルを非同期的に読み込みたいのであれば、チャットサーバー(またはアイドル状態の接続を扱うもの)では100k +以上の接続が可能です。確かに、非同期プログラミングは、今やスレッドベースのプログラミングの問題の多くを避ける「スタイル」ですが、これはどこから始まったのでしょうか(私はこのステートメントの証明はありません)。
  • ファイルの場合、情報を要求するときには、将来すぐに到着するはずです。おそらく、これはHTTP要求を行うことに匹敵するもので、応答を期待していて、同期的にそれを待つだけかもしれません。一方、プッシュメッセージのためだけにソケットをオープンすることができます。メッセージが到着する予定がない場合には期待できません。いくつかの特別なファイルについてはこれも当てはまるかもしれませんが、その場合は別のasync-messageを利用できるようになります。その後、sync-readが起こるはずです(通常のファイルの場合はiNotify、特別なファイルは見ないなど)。
  • あなたが何をしているのか分からない限り、ファイルアクセスを大規模に並列化することは実際は非常に悪い考えです。あなたが別のマシンに接続している可能性があるので、ソケットはそのように便利です。大量のパラレルファイルIOを実行すると、おそらくOSはあなたに要求をシリアル化します(これは、同時に2つの大きなファイルをCD ROMからコピーしようとしましたか?))?私が言ったよう

は、明確な答えは、対象

+0

パラレルにちょうどいくつかの考えは、ほとんどすべてのこれらの日のために良いではありません。メカニカルハードドライブでも、NCQを使用して16の要求を受け入れ、16のバッファがすべて異なるトラックにあっても、バッファ内の16トラック全体を保持することができる十分なバッファRAMを備えています。 –

+0

私はいくつかの並列呼び出しはファイルに意味を理解します。それほど大したものではない。非同期プログラミングは、スレッドがあまりにも多くのメモリを消費しているところで、100k同時接続などでは本当に効果的です。あなたのハードディスクやssdでそれをしたくありません。メモリキャッシュされたファイルの場合、なぜ非同期アクセスを使用するのか、とにかくio waitはありません。 – Claude

+0

それはディスクの読み取りをカバーしていますが、デバイスファイルについての考え方はありますか? – TheMeaningfulEngineer

関連する問題