私が考えるグリーン スレッドの基本的な有用性は、待ち時間の長い操作を行うオブジェクトが大量にあるシステムを実装することです。具体的な例は、他のマシンとの通信です。
def Run():
# Do stuff
request_information() # This call might block
# Proceed doing more stuff
スレッドを使用すると、上記のコードを自然に記述できますが、オブジェクトの数が十分に多い場合、スレッドは適切に実行できません。しかし、非常に大量の場合でも、グリーン スレッドを使用できます。上記request_information()
は、他の作業が待機しているスケジューラーに切り替わり、後で戻る可能性があります。スレッドを使用せずにすぐに返されるかのように、 「ブロッキング」関数を呼び出すことができるというすべての利点が得られます。
これは、単純な方法でコードを書きたい場合、あらゆる種類の分散コンピューティングで明らかに非常に役立ちます。
複数のコアがロックの待機を軽減することも興味深いです。
def Run():
# Do some calculations
green_lock(the_foo)
# Do some more calculations
関数は基本的にgreen_lock
ロックを取得しようとし、オブジェクトを使用している他のコアが原因で失敗した場合はメイン スケジューラに切り替えます。
繰り返しになりますが、グリーン スレッドを使用してブロックを軽減し、コードを自然に記述してパフォーマンスを向上させることができます。