スイッチング1.1コンテキスト
シングルコアプロセッサは、各スレッドにCPUタイムスライスを割り当てることによって、これを達成するために、マルチスレッド・コード実行、CPU機構をサポートします。CPUタイムスライスは、非常に短い時間スライスので、CPUは常にスレッドを切り替えることにより行われ、スレッドごとに割り当てられた時間です。
これは、タスクのタイムスライス、現在のタスクの実行のタイムスライスを実行するためにCPUサイクルで次のタスク割り当てアルゴリズムに切り替わります。次の状態は次のタスクにスイッチバックするようにタスクスイッチが状態を保存する前タスクは、負荷からのプロセスを保存するので、しかし、あなたはその後、午後に再びオンにされ、タスクをロードすることができます。
それは、この本の読み出しがどのように多くのページを書き留めて、我々は同時に2冊の本を読むように、私たちは英語で再び技術的な書籍であれば、私たちは言葉が認識されないことがわかった、だ後、英語の辞書を開いて、しかしその前に、我々は技術的な本を置く必要があります内を終えた後に行数、単語などの数は、この本を読んで続行します。このスイッチは、複数のスレッドの実行速度に影響を与えるだろうと同じコンテキストスイッチを読み込むの効率に影響を与えます。
1.1.1マルチスレッド一定の速いあなたに
パブリッククラスConcurrencyTest { プライベート静的最終長い回数= 100001; 公共の静的な無効メイン(文字列[]引数)InterruptedExceptionある{スロー 並行性を()。 シリアル(); } プライベート静的ボイド並行性は、(){例外:InterruptedExceptionをスロー 長いのstartTime =にSystem.currentTimeMillis(); スレッドスレッド=新しいスレッド(() - > { INT A = 0; iは数<; Iは++){(長いI = 0 、A + = 5; } })。 thread.start(); int型、B = 0; {(; iがカウント<I ++が長いI = 0)のための b--。 } thread.join(); 長いendTimeは=にSystem.currentTimeMillis(); System.out.println(endTimeは-のstartTime + "MS、B =" + B)。 } プライベート静的ボイドシリアル(){ 長いのstartTime =にSystem.currentTimeMillis(); int型のA = 0; 用(長i = 0; iは数<; iは++){ A + = 5。 } int型、B = 0。 {(; iがカウント<I ++が長いI = 0)のための b--。 } 長いendTimeは=にSystem.currentTimeMillis(); System.out.println(endTimeは-のstartTime + "MS、B = "+ B +" --- A =" + A)。 } }
同時実行時の動作は、以上万回を蓄積していない場合、テーブルから見つかり、速度はシリアル実行よりも遅くなります操作を蓄積し、なぜ同時実行速度は、シリアル、それよりも遅くなりますか?これは、スレッドの作成とコンテキストスイッチのオーバーヘッドがあるためです。
時間および期間を切り替える1.1.2テスト・コンテキスト