レジスタ用のスタックとストレージだけが必要なので、安価に作成できるからですか?
スレッドが共通のデータを共有できるという事実、つまり、プロセス間通信を使用する必要がないという事実は、ここでの要因ですか?これにより、保護の必要性が少なくなりますか?
それとも、スレッドはプロセスよりもマルチプロセッサをうまく利用していますか?
レジスタ用のスタックとストレージだけが必要なので、安価に作成できるからですか?
スレッドが共通のデータを共有できるという事実、つまり、プロセス間通信を使用する必要がないという事実は、ここでの要因ですか?これにより、保護の必要性が少なくなりますか?
それとも、スレッドはプロセスよりもマルチプロセッサをうまく利用していますか?
誰が言ったの?一部のオペレーティングシステムでは、ほとんど違いはありません。スレッドがプロセスよりもはるかに軽量なWindowsについて考えていますか?
このStackOverflowの質問を参照すると、さらに詳しく知ることができると思います。
重いスレッド(たとえば、Windowsスレッド)について言えば、プロセスにはスレッドがあり、少なくとも1つのスレッド(メインスレッド)があるので、明らかに重いか、少なくとも軽くはありません:-)(合計は常に>=パーツ)
プロセスに必要な「テーブル」はたくさんあります(開いているファイルテーブル、メモリのマッピング方法を示すテーブル(LDT、ローカル記述子テーブル)...)。プロセスを作成する場合は、これらすべてのテーブルを初期化する必要があります。スレッドを作成する場合、それらは作成しません(スレッドはそのプロセスのものを使用するため)。次に、新しいプロセスですべてのDLLを再度ロードし、再マッピングを確認する必要があります...
Windowsの観点からは、プロセスが多数のDLLをロードし、ベースアドレスの競合のためにそれらをメモリ内で移動している場合、プロセスの作成に時間がかかる可能性があります。次に、DavidHeffernanの回答からのリンクにリストされている他のすべての理由を参照してください。
プロセススイッチでは、CS/DSレジスタを変更する必要があります。これらのレジスタの値を変更するには、グローバル記述子テーブルから新しい記述子をフェッチする必要があります。これは、CPU時間の点で実際にはコストのかかるプロセスです。