スレッドにより、複数の関数を、見た目上ではあるが、同時に実行することが出来のがPython。
しかし、スレッドにはいくつか問題がある
問題
以下の3つが存在する
安全な協調性
互いの安全に動作させるには、Lock()だったりQueueの利用といった、特別な処理をほどこさなくてはならず、ソースが複雑化してしまい、協調性として安全とは言えなくなる。
使用メモリの肥大化
スレッドは、1つの実行に8MBもメモリが必要となってしまう。
数えられないほどのスレッド数を利用することになってしまったら、システムエラーの温床となってしまう。
スレッド利用コスト
逐一、処理用関数を起動し、終了させるとなると、スレッド利用にオーバーヘッドが発生してしまうい、処理の低速化へ繋がってしまう。
解決策
上記問題には、コルーチンを使用することで回避できる。
コルーチンであれば、プログラム内で、複数の関数を擬似的に動かせる。
コルーチンは、ジェネレータの拡張機能として実装されており、コルーチンの起動は関数呼び出しだけで済む。
また、使用するメモリは、1KB以下しか消費せず、パフォーマンスの向上へつながる。
コルーチン作成方法
以下の実装が必要となる
- コルーチンとして実行できるよう、yield式進行を許容する関数(コルーチン)を実装
- next()、send()関数を用いて適切に実装
コルーチン
永遠に実行され続けるジェネレータにて、処理を適時実行できる。
独立した処理として扱える。
スレッドとは異なり、必要に応じてyeild式を実行時にのみ処理を行えるようになる。
yieldを適切に利用して、多くの処理を並行処理的振る舞いをさせることが出来る。
このように、コルーチンはとても素晴らしい機能なのだ。