スケジューリング
1,805のスレッドが同時に実行されることはありません。彼らはトレードオフします。1つのコアが少しのスレッドを実行してから、別のスレッドを少し実行するためにそれを確保します。他のコアも同じです。くるくると、スレッドは一度に少しずつ実行され、一度にすべてではありません。
オペレーティングシステム(DarwinおよびmacOS)の主な責任は、どのスレッドがどのコアでどのくらいの時間実行されるかをスケジューリングすることです。
多くのスレッドには実行する作業がないため、休止状態にあり、スケジュールされていません。同様に、多くのスレッドが、ストレージから取得されるデータ、ネットワーク接続の完了、データベースからのデータのロードなど、いくつかのリソースで待機している場合があります。待機するリソースのステータスを確認する以外にほとんど何もすることなく、そのようなスレッドはたとえあったとしても非常に短時間でスケジュールされます。
アプリプログラマーは、外部リソースの待機に時間がかかることがわかっている場合に、スレッドを一定時間スリープさせることで、このスケジューリング操作を支援できます。また、CPUを集中的に使用し、外部リソースを待機する必要がない「タイトな」ループを実行する場合、プログラマーはボランティアへの呼び出しを挿入して、コアを占有せずに他のスレッドを実行できるように、一時的に保留することができます。
詳細については、マルチスレッドのWikipediaページを参照してください。
同時マルチスレッド
あなたのリンクされた質問に関しては、スレッドは確かにここと同じです。
1つの問題は、OSによってスケジュールされたときにスレッドを切り替えるオーバーヘッドコストです。現在のスレッドの命令とデータをコアからアンロードし、次にスケジュールされているスレッドの命令とデータをロードするには、かなりの時間を要します。オペレーティングシステムの仕事の一部は、このオーバーヘッドコストを最適化するために、スレッドを適切にスケジュールできるようにすることです。
一部のCPUメーカーは、この時間を短縮して、スレッドのペア間の切り替えを大幅に高速化する技術を開発しています。インテルは彼らのテクノロジーをハイパースレッディングと呼んでいます。一般的に同時マルチスレッド(SMT)として知られています。
スレッドのペアは実際には同時に実行されませんが、切り替えは非常にスムーズで高速なので、両方のスレッドが実質的に同時のように見えます。これは非常にうまく機能するため、各コアはOSに対して仮想コアのペアとして表示されます。したがって、たとえば4つの物理コアを持つSMT対応CPUは、8コアCPUとしてOSに提示されます。
この最適化にもかかわらず、そのような仮想コア間の切り替えには、依然としていくつかのオーバーヘッドがあります。CPUを集中的に使用するスレッドが多すぎると、実行時間を要求してすべてがコアでスケジュールされるため、システムが非効率になり、1つのスレッドが多くの作業を行うことはありません。遊び場で3つのボールを9人の子供で共有するのとは対照的に、ボールで1人の子供が真剣にプレイタイムを獲得できない900 人の子供で共有するのと同じです。
したがって、CPUファームウェアには、システム管理者がマシンにスイッチを入れてSMTを無効にできるオプションがあり、一時停止する機会が非常に少ない、異常なCPUバインドのアプリを実行しているユーザーにメリットがあると判断した場合にSMTを無効にすることができます。
そのような場合、元の質問に戻ります。この特別な状況では、実際に、これらのハイパーアクティブスレッドが物理コアよりも多くないように操作を制限する必要があります。繰り返しますが、これは非常に珍しい状況であり、専門的な科学データ処理プロジェクトなどで発生する可能性がありますが、一般的なビジネス/企業/エンタープライズシナリオにはほとんど当てはまりません。