3

TMemoryStream にロードする大きなバイナリ ファイル (約 700 Mb) があります。その後、TMemoryStream.Read() を使用して読み取りを実行し、いくつかの簡単な計算を行いますが、アプリケーションが CPU を 20% 以上使用することはありません。私の PC には i7 プロセッサが搭載されています。スレッドを使用せずに CPU の使用を増やし、読み取りプロセスを高速化する機会はありますか?

4

2 に答える 2

8

私の知る限り、Delphi で複数の CPU コアの能力を利用する唯一の方法は、スレッドを使用することです。

アプリケーションでスレッドを使用することを選択した場合、開発を容易にするライブラリがいくつかあります。Delphi でスレッド化を行うさまざまな方法から選択するにはどうすればよいですか?

于 2012-06-19T11:46:41.270 に答える
2

シャノンの答えに加えて、複数のコアを備えたi7プロセッサでは、1つのスレッドが1つのコアのみを使用します。1つのスレッドを複数のプロセッサコアで実行することはできません。したがって、複数のコアを利用する場合は、さまざまなタスクを処理するために複数のスレッドを作成する必要があります。スレッドの作成は、そのスレッドでこれを行うと言うほど単純ではありません。マルチスレッドについて知っておくべきことがたくさんあります。たとえば、アプリケーションに1つのメインGUIスレッドがあり、1つのスレッドが長い計算の実行専用である場合、別のスレッドがキャプションをリアルタイムデータに更新する場合などです。

Windowsは、スレッドを割り当てるコアを自動的に決定し、通常はそれを公平に分割します。したがって、8つのプロセッサコアと16のスレッドがある場合、各コアは(おそらく)2つのスレッドを取得し、各コアは互いに離れて独自のティックを送信するため、複数のスレッドが文字通り同時に実行される可能性があります(対照的に)各スレッド間で各「ティック」を分割する単一のコアに)。

したがって、質問に答えるために、5つのスレッドが同時に大きな何かを実行している場合、100%のプロセッサ使用率が表示されます。

于 2012-06-20T00:41:02.487 に答える