2017-05-24 7 views
0

スレッドは、コンピュータ内の他のすべてのスレッドと同じ速度で実行されているのだろうか?スレッドが「遅れている」場合、それらはすべて同じプロセッサ上で実行されます。つまり、プロセッサによって実行されたすべてがその時点で遅れていることを意味します。私はこれが正しい仮定だと思いますか?または私は間違っていますか?スレッドは他のすべてのプロセッサタスクと比べて同じ速度で実行されますか?

+0

どのオペレーティングシステムですか?どのようなスレッドシステムですか?どのCPU /アーキテクチャですか?オペレーティングシステム、ライブラリ、またはCPUスレッドについて話していますか?別の「プロセッサー・タスク」とは何ですか? – kfsone

+0

一般に、スレッドが実行されているときは、他のスレッドと同じ秒数のサイクル数でコードを実行します。しかし、OSは、I/Oを待機しているか、アプリケーションによって異なる優先順位が設定されているかに応じて、スレッドの実行頻度を少なくする、または実行時間を短くすることができます。さらに、TurboBoostと省電力技術のためにCPUの速度が上がったり遅くなったりすることがあります。 –

答えて

1

まず最初に、いくつかの点について考えてみましょう。あなたのプログラミング言語の中に概念 "スレッド"が存在するか、言語の "フレームワーク"内に存在することが考えられます。オペレーティングシステム内およびハードウェア内であっても。

重要なことは次のとおりです。実際には、実際のハードウェアでは、CPUにはパイプ、レジスタ、さまざまな要素があります。意味:各スレッドは独自のハードウェア上で動作しています。そのハードウェアは各スレッドごとに同一(可能性が高い)です。したがって、すべてのスレッドは同じ速度(CPUのクロック速度)で動くはずです。

もちろん、他の概念もあります。例えば、スレッド優先度。ほとんどのオペレーティングシステムでは、「このスレッドは別のスレッドより重要です」と言うことができます。つまり、より重要なスレッドの場合は、が他のスレッドより多くのCPUサイクルを受け取る可能性があります。しかし、それは全体的にの負荷にも依存します。

最後に、用語について明確にする必要があります。スレッドは、「アクティビティのスレッド」の抽象化に過ぎません。あなたが特定のコードを実行していると考えられるまで、スレッドは意味がありませんです。だから、スレッド自体は遅れていません。実行しているコードによって、例えばが(例えばIOを実行しているときに)待ってになることがあります。そして、あなたは "not moving"のスレッドを観察します。しかし、これはスレッドが実行する「スピード」に起因するものではなく、実際にスレッドが実行しているものと同じです。

優先順位については、オペレーティングシステム/フレームワークによって大きく異なります。基本的には、「消費」を測定し、その決定を下す1つの要素が存在します。最も簡単なモデルは、スレッドがタイムスライスを受信することです。もちろん、マネージャーの中には、プロセッサ時間を待っているスレッドに利用可能なタイムスライスをどのように配布するかを決めることができます。あなたはhere(かなり古い材料だが、それでも良い読書)を見るかもしれない。特定の実装例についてはthereです。


+0

重要な点は良い点です。それがどういう仕組みか知っていますか?優先度の低いスレッドA(CPUパワーの5%を得る - 私はそれがどのように動作するかを仮定している)を持っているならば。 Aが仕事をしている間、高優先度の別のスレッドBが起動します(そして、CPUの10%を得ているはずです)。オペレーティングシステムはスレッドAから3%を取ることができますか?Bスレッドの作成時にオペレーティングシステムを2%に下げることはできますか? – Lealo

+0

スレッドの優先度を上げると、実行頻度が高くなりますが、処理速度*は変わりません。 http://man7.org/linux/man-pages/man3/pthread_setschedparam.3。html –

+0

@Lealo回答を更新しましたが、理解してください:このような話題について全書籍が書かれています。 1つの答えですべてをカバーするとは思わない。また、私の答えをアップヴォート/あなたの目に合うものにするために何か他のものがあります...今あなたはupvoteレベルに達しましたか? – GhostCat