pythonコラボレーションコンセプト

1414 ワード

協程とは
コヒーレンスは単線路での同時であり,マイクロスレッド,ファイバ路とも呼ばれる.マルチタスクを実現するもう一つの方法であり、スレッドよりも小さな実行ユニットにすぎません.CPUのコンテキストが付属しているため、適切なタイミングで1つのコモンを別のコモンに切り替えることができます.英語名Coroutine.1つの文では、コヒーレンスとは何かを説明します.1つのスレッドの関数の中で、現在の関数の一時変数などの情報をどこでも保存し、別の関数に切り替えて実行することができます.関数を呼び出すことではなく、切り替えの回数といつ元の関数に切り替えるかは開発者が自分で決定します.
スレッドとスレッドの違い:
スレッドの切り替えは、CPUコンテキストの保存と復元だけでなく、システムレベルからのcpuの異なるスレッドでの切り替えであり、パフォーマンスを非常に消費します.しかし,コパスは同じスレッド内で異なる関数を切り替えるだけで,CPUのコンテキストを簡単に操作するだけで,消費する性能が大幅に減少する.強調しなければならないのは、
  • pythonのスレッドはカーネルレベルに属し、オペレーティングシステムによってスケジューリングが制御される(単一スレッドがioに遭遇したり、実行時間が長すぎるとcpu実行権限が渡され、他のスレッド実行に切り替わる)
  • .
  • 単一スレッド内でコモンシップをオンにすると、ioに遭遇すると、オペレーティングシステムではなくアプリケーションレベルから切り替えを制御し、効率を向上させる(!!!!非io操作の切り替えは効率に関係なく)オペレーティングシステム制御スレッドの切り替えと比較して、ユーザーが単一スレッド内で空のボックスコモンシップの切り替えには以下の利点と欠点がある:利点:
  • コンシステントの切替オーバーヘッドはより小さく、プログラムレベルの切替に属し、オペレーティングシステムは完全に感じられないため、より軽量級の
  • である.
  • 単一スレッド内で同時効果を実現でき、cpuの欠点を最大限に利用できる:
  • コモンの本質は単一スレッドの下で、マルチコアを利用することができなくて、1つのプログラムが複数のプロセスを開くことができて、各プロセス内で複数のスレッドを開くことができて、各スレッド内でコモン
  • を開くことができます
  • コパスは単一のスレッドを指すので、コパスがブロックすると、スレッド
  • 全体がブロックされる.
    pythonコモンモジュール-Gevent使用
    Geventはサードパーティ製のライブラリであり、geventによって容易に同時同期または非同期プログラミングを実現することができ、geventで使用される主なモードはGreenletである.例は次のとおりです.
    import gevent
    g1 = gevent.spawn(func,1,2,3,x=4,y=5)func     
    g2 = gevent.spawn(func2)
    g1.join() #  g1  
    g2.join() #          :
    gevent.joinall([g1,g2])
    g1.value #  func1