パイソン:はじめにコルーチン

  CPUタスクを実行して、2つの場合に(システム制御力によってスイッチング動作)カットの周りに他のタスクを実行する:
  一つの場合は、タスクは、閉塞が発生したであり、
  もう一つは、時間を計算するタスクであるが長すぎていますまたは優先度の高いプログラムに置き換えられています。

1.コルーチンとは何ですか?

  コルーチン、本質的にスレッド上で、タスク切り替えの前に、スレッドは、オペレーティングシステムによって制御されているが遭遇したのI / O、スイッチは自動的に、我々は今、コルーチンオブジェクトが少ないオーバーヘッドOSの切り替え(スイッチングスレッド、作成されたレジスタでありますなどなど、それらの間のスイッチに)スタック、ここで私たち自身のプログラムには、タスクスイッチを制御します。

 

コルーチン収率によって実現2、

  ただ取得するには、効率を改善しない第二ケースの上にCPUが下降雨ができ、複数のタスクは、純粋な計算であれば、すべてのタスクは、結果の「同時」実装です実現するようだが、このスイッチの効率が低下します。これに基づき、我々はできる検証します。収量は、状態を実行するためのタスクがシングルスレッド方法で保存することができ、それ自体であります

  最初のケースを切り替えます。遭遇したミッションではioの状況、二つのタスクにカットは、あなたが完全なコンピューティングタスクII、この中に効率向上にブロックされたタスクを利用できるようにすることを、実行します。

  yiledは、状態を保存することができますもたらす多くのスレッドのようなオペレーティングシステムの保全及び保全状況の状態を、しかし収率は、より軽量なコードレベルコントロールです

  送信結果は、単一スレッドプログラムの切り替えを達成するために、他の機能の関数に渡すことができます

インポート
デフ消費者(): しばらく真: X = 降伏 印刷' 処理されたデータ:' 、X)
DEF プロデューサー(): G = 消費者() 次の(G) I の範囲(3 ): g.send(I) 印刷' データを送信する:' 、I)
スタート
= time.time() プロデューサー() ストップ = time.time() プリント(ストップスタート)

  収率は検出できないIOを、遭遇達成IO自動的にスイッチを

  コルーチンを伝えることであるCPythonとの通訳を、あなたがされていないNBに従事していないGILのも、それをロック、私あなたがスレッド、お時間の節約を切り替えるスレッドを実行するための独自の混乱、私はあなたよりも、スイッチに切り替えはるかに速く、多くのオーバーヘッドを避けます。

  シングルスレッドのために、私たちは必然的に、プログラムで発生したioの操作が、我々は、複数のシングルスレッドのタスクの制御下で、独自のプログラム(すなわち、ユーザプログラムレベルではなく、オペレーティングシステムレベルよりも)でタスクに会うことができるかどうIOブロッキングは、このようにスレッドがそれは常に可能最大化するために準備状態にあることを確実にすること、計算に別のタスクに切り替えられたときに、CPUの IOを最大化するために、私たち自身の業務に相当するユーザプログラムレベルで実行状態隠された、オペレーティングシステムが混乱することができますので、見てみましょう:このスレッドは、計算されているようだIOは、より多くのように比較的小さく、CPU割り当てられた権限は、私たちのスレッドを実行します。

  コルーチンは、シングルスレッド、ユーザタスクを検出したことにより、制御の性質にあるioの効率を向上させるために、実行する他のタスクにスイッチを遮断します。それを達成するために、我々は同時に、次の基準を満たすソリューションの方法を見つける必要があります。

  1は、複数のタスク間のスイッチングを制御することができる、タスクのハンドオーバステータスの前にはそう再実行し、継続する休止の位置に基づくことができるときに、保存されます。

  2.ようサプリメント:検出できるIOの顔の動作をIOスイッチング動作が場合にのみ発生します

図3に示すように、具体的な記述コルーチン

  コルーチン:同時、シングルスレッドとも呼ばれるマイクロスレッドは、シュレッド。英語コルーチン何が単語記述コルーチンです:コルーチン軽量スレッドはすなわちコルーチンは、ユーザプログラムのスケジューリング自身によって制御され、ユーザー状態です。

これは、ことが強調されます。

  Pythonのオペレーティングシステムのスケジューラ(例えば、シングルスレッドの遭遇などによって制御され、カーネルレベルに属するスレッド、IOや実行時間が長すぎる降伏を余儀なくされていることは、CPU実行権限を、実行している別のスレッドへの切り替え)

  単一のスレッドは、イベント内のオープンコルーチンIO(の効率を高めるために!!!非アプリケーションレベルから(むしろ、オペレーティングシステムより)制御スイッチ、意志IO非依存性スイッチングと効率動作)

  比較切替制御スレッド・オペレーティング・システム、ユーザ・コントロールシングルスレッドコルーチンのスイッチング

利点:

  1. 协程的切换开销更小,属于程序级别的切换,操作系统完全感知不到,因而更加轻量级

  2. 单线程内就可以实现并发的效果,最大限度地利用cpu

短所:

  1. 协程的本质是单线程下,无法利用多核,可以是一个程序开启多个进程,每个进程内开启多个线程,每个线程内开启协程 

  2. 协程指的是单个线程,因而一旦协程出现阻塞,将会阻塞整个线程

コルーチンの特徴を要約したものです。

  それが唯一のシングルスレッド内で同時に実施されなければなりません

  変更は、ロックせずにデータを共有しました

  ユーザープログラムの制御フロースタック複数のコンテキスト保存

  コルーチン遭遇IOの動作は自動的に他のコルーチンに切り替え(検出方法IO収率greenletを達成することができない、それは使用geventモジュール(SELECT機構))

 

おすすめ

転載: www.cnblogs.com/xmcwm/p/11980387.html