並行プログラミングのいくつかの基本的な概念

彼は並行プログラミングを述べ、最も基本的な概念は徹底的にプロセスとスレッドであるかを理解することであり、これら二つの概念の上に、あなたが書かれた私の以前の記事を参照することができます:
プロセスとスレッドとは何ですか

CPUコアとスレッドの数との関係

マルチコア:また、シングルチップマルチプロセッサ(CMPと呼ばれるチップマルチプロセッサ)と呼ばれる、CMPは、スタンフォード大学によって提案され、アイデアがである超並列プロセッサSMP(対称型マルチプロセッサ)同じチップに集積異なる処理の各プロセッサの並列実行。これは、同時に実行する複数のプログラムに依存しており、並列CPUで並列処理と呼ばれる重要方向超高速の計算、です。

マルチスレッド:マルチスレッド同時処理は、SMTは、単一のプロセッサ上で複数のスレッドがプロセッサの実行リソースの同期や共有を行うことができます言及しました...

コア、スレッドの数:現在主流のCPUは、マルチコアです。一般に、4つのクワッドコアCPUスレッドを持っていることを、1の対応関係:コアの数を増やすと、オペレーティングシステムは、一般的に、スレッドがタスクを実行することであるので、それらは1であり、スレッドの数を増加させることです。2関係:しかし、インテルハイパースレッディング・テクノロジーの導入後、コアとスレッドの数が1を形成します。
ここに画像を挿入説明

CPUタイムスライス回転機構

私たちは通常、開発中に、気持ちがなぜCPUコアの数、私もシングルコアCPUで、スレッドは、スレッドを開始し始めたい、によって限定されるものではありませんか?CPUのオペレーティングシステムは、ラウンドロビンメカニズムを提供するためです。

ラウンドロビンスケジューリングはまたとして知られている最古の、最も簡単な、最も公平かつ最も広く使用されているアルゴリズムの一つであるRRスケジューリング各プロセスは、一定の時間が割り当てられ、そのタイムスライス、プロセスの実行を許可されている時に呼び出されます。

次のようにCPUタイムスライス回転機構の原理のBaiduの百科事典について説明します。

プロセスがまだタイムスライスの終わりに実行されている場合は、CPUが奪われ、別のプロセスに割り当てられます。タイムスライスまたはブロッキング接合の終了前工程では、CPUはすぐに切り替えた場合。行うためのスケジューラは、プロセスがそのタイムスライスを実行するとき、それはキューの最後に移動して、プロセスの準備リストを維持します。

ラウンドロビンスケジューリングのみ興味深い点は、タイムスライスの長さということです。別のプロセスからの切り替えがロードおよびメモリマップされたレジスタの値を保存し、更新各種テーブルやキューを含む所定の時間を必要とします。切断工程(processwitch)場合、時々呼ばれるコンテキスト切り替え(コンテキスト・スイッチ)、必要の5msの、そのタイムスロットは20ミリ秒後に設定されていると、その後、有用な作業を行う20msで、CPUの5msのは、プロセススイッチングになります。20%のCPU時間は、管理オーバーヘッドまでに浪費されます。

CPU効率を改善するために、我々は、タイムスライス5000msを設定することができます。この時点では0.1%だけを無駄にしました。しかし、10人のユーザーが相互に作用し、ほぼ同時に、Enterキーを押してくださいがある場合、何が起こる、タイムシェアリングシステムでは考慮に入れて?他のすべてのプロセスがそのタイムスライスをフルに活用を持っていると仮定すると、最後に残念なプロセスは、実行する機会を得る5Sを待たなければなりませんでした。ほとんどのユーザーが5に対応するための簡単なコマンドを容認することはできません、同じ問題は、マルチチャンネルのパーソナルコンピュータのための支援のプログラムで発生します。

タイムスライスが短すぎる設定されているCPUの効率を低下させ、過度のプロセススイッチングを引き起こす可能性があります:セットが長すぎる彼らが悪化し、短い対話的な要求への応答を引き起こす可能性があり、次のように結論をまとめることができます。100ミリ秒に設定されたタイムスライスは通常、合理的な妥協です。

CPUがクラッシュした場合には、実際には、我々はあなたが100%のCPUは、コンピュータを再起動しない場合を取得するためのプログラムを実行すると、実際には、我々はまだそれが殺す作るチャンスを持っていることがわかり、私はそれがこのために正確だと思いますメカニズムのための一種。

明確化の並列と同時

車両が平行であることができるときにサイドA以下8によって側を歩いている間、我々は、高速道路Aが存在する場合、上記の側の8つのレーンの側面があり、最大同時車両が8で、この規定ハイウェイ車両の例を与えます実行します。CPUはまた、この原理、高速道路AにCPUと同等であり、コアの数が、スレッドまたは側通行レーン側の数に相当し;そして側CPUによって側の複数は、いくつかの高速道路、高速道路、どのように並んで各辺に相当しますレーン。

単位時間当たりの量はどのくらい複雑であることを意味し、時間の単位を、追加して同時確認について話したとき?左は、単位時間は、実際には無意味です。

諺に通り、1が同じコンピュータである2、とすることはできませんとして、原則的には、CPUだけでプロセスを実行するために、プロセスに割り当てることができます。我々は通常、それは同時に複数のプロセスを実行するために、マルチタスクにするために、唯一の心で唯一のCPUを、使用するコンピュータは、我々は同時テクニックを使用する必要があります。並行処理技術は非常に複雑であり、理解するのが最も簡単である「ラウンドロビンプロセスのスケジューリングアルゴリズム。」

要約すると:

並行性:あなたは2つのスレッドが開いて実行する場合交互速度は、2つのスイッチを続けて検出することはほとんど不可能であること、同時に複数のタスクを実行しないように、単一のCPUコアの下でマルチスレッド実行など、さまざまなタスクを実行することができるアプリケーションを指しタスクは、本当に「結果の同時実現」に達しているが、コンピュータの速度が速すぎる、我々はそれを検出することはできません。
パラレル:あなたは二つのことを同時に実行することができ、食べて、電話することができたときに食べます。たとえば、同時に異なるタスクを実行できるアプリケーションを指します。

高並行プログラミング、メリットや注意事項を意味

マルチコアCPUのマルチスレッド、マルチスレッド、高並行プログラミングますます注目と関心の誕生以来。マルチスレッドは、プログラムに次のような利点をもたらすことができます。

(1)CPUリソースを最大限に活用する
あなたはまだ、シングルスレッド化技術を使用している場合、CPUの上記の説明から、あなたは市場の外を見ることができます今、特にサーバーには、また、メカニズムをマルチスレッドを使用せずに複数のCPUコアCPUではありませんそれが外に明らかに、思考を行います。基本的なスケジューリング部プログラムはスレッドで、スレッドが唯一のスレッドCPUのコアを実行することができ、あなたがi3のCPUであれば、最悪は、デュアルコア4スレッドのコンピューティングパワーがあるので:スレッドの場合プログラムは、それはCPU性能3/4の無駄です:あなたはマルチスレッドのプログラムを設計する場合、それは同時に複数のCPUの複数のコアで複数のスレッドを実行することができ、完全に削減、CPUを利用することができますCPUのアイドル時間は、並行性を向上させるためのコンピューティングパワーを再生します。

彼らは長期的に深刻な読書しているとき、多くの人が地下鉄に乗ると、あなたは多くの時間と同等の二倍持っているので、読んで家に行くために地下鉄を取るのではなく、地下鉄に乗るように我々は通常、地下鉄を取るよう。これは何人かの人々多くの時間、及び一部の人々は常に私たちの時間をフルに活用し、作業には時間が、あまりにも、時にはいくつかのことを行うために複雑なことはできないと述べた理由の一つである、CPUは同じですが、また、完全に使用しています。

(2)スピードユーザーの応答時間までは
、私たちはしばしばサンダーのダウンロードを使用するなど、ダウンロードに開放複数のスレッドに同じように、誰もがダウンロードにスレッドを使用することを望んでいない、なぜ?答えはどれだけ速く、複数のスレッドをダウンロードしていること、単純です。
私たちは、1Sは、トラフィックフローならば、変換の数を増やすことができるようになります場合は、Webページの応答時間を向上させるために、我々はインターネットのプロジェクトを行う場合は特に、プログラム開発時にそうする必要があります。あなたは、静的リソース二十から三サブドメイン負荷、なぜ?あなたのページのそれぞれ1以上のサブドメイン名、ブラウザのロード時間がされるので、よりオープンな複数のスレッドにしてアドレスしたいことをウェブフロントエンドノウハウの高いパフォーマンスチューニングを行いましたあなたのページのリソースをロードするために、サイトの応答速度を向上させます。マルチスレッド、高い同時実行は本当にどこにでもあります。

(3)あなたのコード、モジュラー、非同期、簡素化することができます
たとえば、私たちはメッセージを分割することができ、注文を電気システム事業を実現し、ユーザーにテキストメッセージを送信、ユーザーがテキストメッセージ、電子メール2回に分けを送る与えます別々のモジュールとして、および実行するために他のスレッドに引き渡さ。これは、非同期操作を増やし、システムのパフォーマンスを改善するだけでなく、プログラムのモジュール性、透明性と簡素化をすることはありません。

公開された19元の記事 ウォンの賞賛6 ビュー180 000 +

おすすめ

転載: blog.csdn.net/qiangzi1103/article/details/104480083