ファイルを読み取るには、任意の言語または OS で syscall を作成する必要があります。これは、基盤となるオペレーティング システムを呼び出し、ファイルの内容がメモリに格納されるのを待つことを意味します (OS のセキュリティ チェックとそのすべてに合格すると仮定します)。 )。ファイルの読み取りをマルチスレッド化すると、実際には速度が低下します。これは、プログラムの実行から抜け出し、制御をオペレーティングシステムに渡すシステムコールが増えるためです。
そのため、最善の提案は hyde です。必要に応じて、ファイルの解析を複数のスレッドに分割することをお勧めします。ただし、そのようなサイズのファイルを数秒で解析できる場合は、あまり価値がないと思います。たとえば、グラフィカル アプリケーションを実行している場合、UI がフリーズしないように、ファイルの読み込み用に別のスレッドを保持する必要があります。
速度の問題については、主に 2 つの問題があると思います。まず、Pythonはデフォルトでメモリバッファを介してファイルを読み取るため、実行速度が向上すると思われます。ファイルの読み取りをバッファリングできる場合 (syscall の回数を減らすことができるため)、パフォーマンスがいくらか向上する可能性があります。もう 1 つの問題は、データをロード/解析するために Python と C++ で使用しているデータ構造です。コードを知らなければ、具体的な提案はできませんが、プログラムに適用可能なさまざまなデータ構造について調査/検討するのに少し時間がかかると役立つ場合があります。Python と C++ のデータ構造のパフォーマンス プロファイルは大きく異なるため、Python で適切に機能するものを C++ で使用すると、はるかに悪い選択になる可能性があることに注意してください。
編集: http://www.cplusplus.com/reference/の C++ STL でファイル バッファリングを使用する簡単なサンプル
// read a file into buffer - sgetn() example
#include <iostream> // std::cout, std::streambuf, std::streamsize
#include <fstream> // std::ifstream
int main () {
char* contents;
std::ifstream istr ("test.txt");
if (istr) {
std::streambuf * pbuf = istr.rdbuf();
std::streamsize size = pbuf->pubseekoff(0,istr.end);
pbuf->pubseekoff(0,istr.beg); // rewind
contents = new char [size];
pbuf->sgetn (contents,size);
istr.close();
std::cout.write (contents,size);
}
return 0;
}