2017-10-26 7 views
-2

大きなファイル(4GB以上)の処理性能を向上させる必要があります。このファイルを処理するために48個のハードウェアスレッドを実行できます。しかし、稼働中のサーバー上には、磁気ハードドライブもあります。 このファイルをRAMに読み込むことはできません。 そして、私の質問は、このマルチスレッドのファイルからの読み込みが可能かどうかです。スレッドはファイルから読み込み専用の行を終了するために別のスレッドで待機しなければならないため、ハードウェアレベルではこれが順次処理になりますが、コードレベルでは処理がマルチスレッドになります。磁気ハードドライブに格納されているマルチスレッド読み取りフォームファイル

答えて

1

ファイルをRAMにロードできないと言うと、一度にファイル全体を意味しますか?あなたがまだそれをメモリに読み込んでいるディスクからそれを読み取るには、それを長い間メモリに保存していないかもしれません。

ファイルを読み込む最速の方法は、ファイルのシーケンシャルな読み取りのままで、複数のスレッドがディスクの頭を動かさないようにします。データの読み込みからデータの処理を切り離すことができれば、読み込みのチャンクを処理している他のスレッドに順番に渡しながら、データを読み取る単一のスレッドを持つことができます。

質問には言語が付けられていないため、より正確なテクニックを使用することは誰にも困難です。例えば、私は1人の作業者にファイルを順番に読み込み、読み込んだ行をチャンネルに配置し、チャンネルを処理するのに必要な数のワーカールーチンを作成します。

+0

私の指導者によって指定された言語はPythonです。あなたは提案し、ファイルのチャンクをRAMにロードし、このチャンクを多くのスレッドで処理しますか? –

+0

「データを処理する」という用語は、ここではあまりよく定義されていません。なぜなら、あなたが何をやっているのかわからないからですが、シーケンシャルリーダーをマルチスレッド処理から独立させて、データの並行処理も可能ですが、ファイル内の行の順序についてあまり心配する必要はありませんが、そうでない場合は順序を理解するためのロジックが必要になります。 – Andrew

+0

私はこのファイルについてもっと詳しく説明します...このファイルの行は、TimeとMsgという2つのカテゴリに分割されています。プロセスのmsg行には前回の行についてのkonwledgeが必要です。ですから、最初に私は約48のチャンクでファイルを分割しなければなりません。そして、このチャンクを開始するには、タイムラインを見つけてください。これは、このファイルを処理するための最初のステップです。チャンク(長さが違う)を分割した場合、他のスレッドがこのファイルを処理(msgをデコードし、タイムスタンプを貼り付けて他のデータベースに貼り付ける)ことができます。 –

関連する問題