これは、パフォーマンスの最適化に関する一般的な概念的な質問です。次の実際のケースに動機づけられています。
100Mbpsの制限があるWindowsネットワークドライブにファイルがあります。これはバイナリファイルで、165MBです。
私のローカルマシンには、このファイル形式を操作するために特別に設計されたソフトウェアが搭載されており、そのソフトウェアで開くと、すべての情報を表示するのに1秒もかかりません。この1秒間にタスクマネージャを監視すると、ソフトウェアのプロセスは次のようになります。
形式は既知であるため、Pythonスクリプトを解析して解析し、struct
モジュールを使用しているときにできる最速は約15〜17秒です。この間PythonプロセスのCPU使用率は変化しませんが、ネットワーク使用率は94%に達します(平均82 Mbps)。
ソフトウェアがファイルを完全に高速で読み取ることができるようにするために何ができるでしょうか?それでも私はネットワーク帯域幅を最大化していて、はるかに長くかかりますか?
100 Mbps (メガビット/秒)のネットワークは、ペイロードとプロトコルのオーバーヘッドを含めて、1秒あたり12.5 MBを伝送します。 165 MBのファイルには少なくとも13.5秒必要です(実際には少し多く必要です。データは最大64KBの IPパケット にパックする必要があり、それぞれに40バイトのヘッダーが追加されます)。
したがって、アプリケーションが完全なデータを1秒未満で読み取ることができることは厳密に不可能です。
ただし、記述した動作を実現するには、いくつかの可能性があります。
最後の仮説は断然最も可能性が高いです。