web-dev-qa-db-ja.com

スレッド:多対1モデルと1対1モデルの同時実行性の違い

私は「スレッド」の部分を教科書、Abraham Silberschatz、Peter、Gregが書いたオペレーティングシステムの概念で勉強しています。

まず、教科書で私の質問に関連することを言ってから、質問します。誰かがすでに次の理論を知っている場合は、私の質問に進んでください。


この本は、並列性と並行性を次のように定義しています。


同時実行は、進行中の複数のタスクをサポートします。

シングルコアシステムでの同時実行:


並列処理は、システムが複数のタスクを同時に実行できることを意味します。

マルチコアシステムでの並列処理:

Parallelism on a multi-core system


多対1モデル:カーネルは一度に1つのスレッドしかスケジュールできないため、真の同時実行性は得られません。


1対1モデル:多対1モデルよりも同時実行性が向上します。 "


私の質問は、なぜman-to-oneモデルで同時実行性が得られないのか、そしてone-to-oneモデルmany-to-oneモデルよりも同時実行性を提供する理由)です。モデル

多対1モデルのパフォーマンスは得られないと思いますが、同時実行性はシングルスレッドの4倍です。さらに、one-to-oneモデルは、単一スレッドの4倍の同時実行性を提供します(man-to-oneモデルと同じ)。さらに、並列処理は、マルチプロセッサアーキテクチャの多対1モデルより4倍優れています。

私の結論は教科書が間違って書いたということです。したがって、次のように変更する必要があります

多対1モデル:同時実行性はユーザースレッドの数まで向上しますが、カーネルは一度に1つのスレッドしかスケジュールできないため、パフォーマンスは向上しません。

1対1モデル:同時実行性はユーザースレッドの数まで向上し、パフォーマンスもプロセッサの数まで向上します。

私の考えは正しいですか、間違っていますか?読んでくれてありがとう。

5
Danny_Kim

あなたの教科書は間違っていませんが、「並行性」という用語を少し緩く使用していることがあります。

同時実行は、複数のタスクが同時に実行されている外観があることを意味します。
True concurrencyは、複数のタスクが実際に同時に実行されることを意味します。これは並列処理とも呼ばれます。あなたの教科書はこれらの用語を交換可能に使用しているように見えますが、これは間違いではありませんが、「真実」という言葉を見落とすと誤解を招く可能性があります。


多対1モデルでは、同時実行性(タスクが同時に実行されるように見える)は得られますが、並列性は得られません。カーネルスレッドは1つしかなく、複数のプロセッサに分散することはできません。

On-to-oneモデルでは、各ユーザースレッドに対応するカーネルスレッドがあり、これによりカーネルは同時実行性または並列処理さえも提供するためのより多くのオプションを提供します。