4

わかりましたので、この質問にのタグを付けました。これ は、現在書いている言語であるため、主に考えているためです。ただし、これはプログラミングの世界でも同様に一般的です。

私の質問は: プロセッサが処理できるスレッド数に制限はありますか? また、アプリケーションがこの制限を最大化する可能性はどのくらいですか? そして、私がそうしたらどうなるでしょうか?

私はスレッドについてあまり詳しくありません - スレッドによって一度に 2 つのプロセスを実行できることだけは知っています (これはおそらく正しい用語でさえありません)。最初は、シングル コア プロセッサでは複数のスレッドを使用できないと思っていましたが、常識が働いて、Windows などを考えるとそれは不可能だろうと考えました。しかし今、私は疑問に思っています.シングルコアプロセッサとマルチコアプロセッサの違いは何ですか/マルチコアプロセッサは何ができるのでしょうか?

可能な限り簡単な言葉で説明していただければ幸いです。前もって感謝します

4

5 に答える 5

5

通常、プロセッサは一度に 1 つのスレッドを実行できます。ただし、それよりもはるかに多くのことを処理できます。複数のプロセスを実行している場合、プロセッサはそれらの間で非常に迅速に切り替わり、それぞれにプロセッサの時間の一部が与えられます。これは同時実行の錯覚を与えますが、実際にはすべてが連続して行われています。

実行できるスレッド数に厳密な制限はありませんが、プロセッサがスレッド間で切り替えるときにオーバーヘッドが発生します。GUI を使用してアプリケーションを構築している場合は、GUI の応答性を維持できるように、実行時間の長いタスク用に別のスレッドを生成することをお勧めします。複数のプロセッサを搭載したコンピューターまたは真の同時実行性を可能にする他のソリューションで実行することを期待している場合は、個別のスレッドで実行することでそれを利用することができますが、問題がより複雑になり、バグが発生する可能性があります。追跡します。

現在、ほとんどのコンピューターはマルチコアであり、実際には複数のスレッドを同時に実行できます。実際、個々のプロセッサーを強化するのではなく、同時実行性を高めることが、将来のコンピューターの発展につながる可能性があります。それを活かすこと大事だけど難しい。アプリケーションをマルチスレッド化する特別な理由がない場合は、快適に使用できるようになるまで、マルチスレッド化を避けることをお勧めします。

于 2012-07-27T12:15:23.810 に答える
3

Javaでは、スレッドを処理するためのメモリが不足すると、スレッドの作成が制限されます。これを行うには、2GiBのRAMで約10,000が必要でした。ヒットするOutOfMemoryExceptionと、JVMプロセスを強制終了するのに苦労する可能性があるため、シェル/タスクマネージャーを既に開いていない限り、問題が発生します。

プロセッサに関しては、コアごとに一度に1つ(または2つ)しか実行されません。スレッドAが少しの間実行され、次にスレッド2などが実行されるように時間を割り当てるのは、スケジューラー(OSの一部)の仕事です。このようにして、一度に複数のことを実行できます。マルチコアCPUを使用している場合は、スケジューラーがどのスレッドをどのコアに割り当てるかを割り当て、余分な労力をかけずにこれを利用できるようにします。

一般的に、これについてあまり心配する必要はありません。同時に処理する必要がある場合は、複数のスレッドを作成するだけです(たとえば、バックグラウンドタスクが発生している間、GUIコードは処理を継続する必要があります)。とにかく、ほとんどのアプリケーションには20未満のスレッドがあります。

于 2012-07-27T12:09:00.103 に答える
2

プロセッサが処理できるスレッド数に制限はありますか?

1 つまたは 2 つしか実行できません (ハイパースレッディングを使用)。一部の sparc プロセッサは、最大 16 まで処理できます。

これよりも多くのスレッドを作成すると非効率になる可能性があるため、多くのスレッドを作成することを検討する場合は、これを覚えておく価値があります (特にプロセスが CPU バウンドの場合)。

一度に2つのプロセスを実行できることを知っています

「プロセス」には、1 つ以上のスレッドが含まれます。つまり、「プロセス」には特定の意味があります。

シングル コア プロセッサとマルチ コア プロセッサの違いは何ですか / マルチコア プロセッサは何を許可しますか

複数のコアで複数のスレッドを同時に実行できます。単一のコアで複数のスレッドの実行をシミュレートできます (気付かないほど高速です)

すべてのコアを使用するのに十分なスレッドがあれば、スループットを直線的に向上させることができます。たとえば、1 コアで 1 秒あたり 10,000 のリクエストを処理できる場合、8 コアで 1 秒あたり 80,000 を処理できる可能性があります。

于 2012-07-27T12:03:18.013 に答える
0

実際に並行して実行できるスレッドの数はごくわずか(プロセッサに依存)しかないことをご存知だと思います。しかし、あなたは合計でいくつのスレッドを処理できるかを尋ねていると思います(そして時々切り替えられます)。

スレッドの総数には制限があるかもしれませんが(オペレーティングシステムと使用するハードウェアによって異なります)、 この最大数に達することはほとんどありません。以前は、(特定の数のスレッドから)より多くのスレッドがより多くのパフォーマンスをもたらさないため、大きなパフォーマンスの問題が発生しますが、その逆です。

ただし、この行では、並列処理を増やしてもパフォーマンスが向上しないため、コアの数ではなく、2倍または4倍になる可能性があります。

于 2012-07-27T12:08:28.930 に答える
0
Is there any limit to how many threads a processor can handle?

1) コンピューターは、使用可能な CPU のコアと同じ数の RUNNING スレッドを同時に実行できます。

2) 実行が必要なスレッドの数がコアの数よりも多い場合、OS はスケジューリング アルゴリズムを適用して、ハードウェア割り込みまたはシステム コールが OS に入り、実行が必要なスレッドのセットを変更した後に実行するスレッドのセットを決定します。

3)実行されていない/実行する準備ができていないスレッド、つまり。I/O または相互に待機しており、仮想メモリ内のデッド コード/スタック スペースであるため、直接的なオーバーヘッドは発生しません。

概要:

プロセッサが処理できる実行中のスレッドの制限は、コアの数と同じです。

OS/メモリ システムは、どの状態でもスレッドの総数を制限します。

于 2012-07-27T12:45:23.593 に答える