コンテキストの切り替えを学習並行プログラミングの注意事項

概念のプロセスを導入するコンテキストスイッチの導入前に、順序内のスレッドは、より良いコンテキストスイッチを理解します

プロセス:コンピュータプログラムのオペレーティングシステムで定義されているが、上のデータ収集活動上で実行され、システムがリソースの割り当てとスケジューリングの基本単位です。以前のオペレーティングシステム、直接プロセスからプログラムの実際の実行中に、すなわち、所謂プログラムデータ、命令及び説明の組織形態です。このプロセスは、ヒープが共有されなかったり、スタックを共有しているどちらも、オペレーティングシステムによるスケジューリングのプロセスを独自の独立したスタックとヒープを持っています

スレッド:初期のオペレーティング・システム・プログラムを処理することによって実行され、今のオペレーティングシステムは、スレッドによって実行される、スレッドは処理容器であり、各プロセスは、テキスト領域(文字領域)を含め、通常の状況下では、独自のアドレス空間を有していますデータ領域(データ領域)とスタック(スタック領域)。コードは、プロセッサ記憶されたテキスト領域で実行され、実行プロセス変数の間に使用される、動的に割り当てられたメモリ領域のデータを格納する、領域ストア命令と呼び出し手順活動のローカル変数をスタック。スレッドには、独自の独立したスタックとヒープのシェアを持っている、スレッドのヒープが共有され、共有されていないスタック、オペレーティングシステムによって、同じスレッドのスケジューリング

コルーチン:サブルーチンとコルーチンに似ています。コルーチン(コルーチン)も成分です。コルーチンとスレッドが同じスタックを共有し、スタックは共有されません。コルーチンプログラマコードによって制御されるスケジュールにするかどうか、コード管理よく、それは無意味なスケジューリングを回避することができる、コルーチンを回避するために使用することができます

JDKのネイティブJavaは、対応するAPIを提供していないで、唯一のサードパーティのコンポーネントを介して行うことができ、2つのフレームgithubの上がサポートされ、https://github.com/offbynull/coroutines,https://github.com/キリム/キリム

文脈(コンテキスト・スイッチ)のスイッチング:シングルコアCPUの場合、一度に一つだけスレッドが、並列に実行され、シングルコアCPUは、コードのマルチスレッド実行をサポートすることができ、スレッドに割り当てられたCPUタイムスライスによって解決されます。タイムスライス、タスク切り替えの実装が完了した後、最初に次の変更に切り替える前に、タスクの状態を保存するように、各サイトには、いわゆるCPUのタイムスライスが割り当てられているタイムスライス時間は、非常に短く、あなたは状態のタスクをロードすることができ、戻ってきて、そのプロセスはスレッド間、プロセスがすることもできコンテキストの切り替えができる唯一のスイッチング状態と呼ばれるコンテキストを保存するタスクからタスクを再ロードするために

コンテキストスイッチのテスト:

  • Lmbench3 [1]は、コンテキストスイッチの期間を測定します。
  • vmstatのコンテキストスイッチを測定することができます使用します。

コンテキストの切り替えを避ける方法:

マルチスレッドロックの競合は、1つがロックされ、これら二つの側面から始めることができるように、つまり、ロックしようとしないで、頻繁にコンテキストスイッチにつながる、一つの側面は、他の方法に置き換え、スレッドずに、スレッドです

  • ハッシュアルゴリズムモジュロIDセグメントに従ってモジュロセグメント、異なる端部の異なる処理スレッドのデータ
  • CASのアルゴリズムは、Javaは、データを更新するためのアトミックCASアルゴリズムを使用することで、ロックを使用していませんでした
  • コルーチン不要な呼び出しを配置し​​ない方法を使用して、コンテキストを避けるためにスイッチ
  • volatitleアプリケーション、揮発性のキーワードは軽量ロックであると言うことができ、揮発性のキーワードを達成するためのスレッド操作の可視性である、コンテキストスイッチを回避するために使用することができます

おすすめ

転載: www.cnblogs.com/mzq123/p/11582282.html