(Joonas Pulakkaからの)ブロッキングキューは、強力な答えです。より簡単な答えがうまくいくかもしれません。すべてのデータがソースに保存されている場合は、参照をプロセッサに渡すだけで、ソースからデータを取得できます。もちろん、これはおそらくあなたが過去にやっていたことです。ソース内のメモリにすべてのデータが含まれておらず、必要な低カップリングが得られない場合があります。
次のステップは、列挙子または反復子インターフェースを使用することです。(イテレータはJavaでより一般的ですが、ほとんどの場合、そのremove
メソッドは単なるニュアンスです。)プロセッサはソースからイテレータを取得し、完了するまでメソッドを呼び出します。ソースがテラバイト単位のデータをどこかからプルしている場合、呼び出しごとに時間がかかる場合があります。しかし、とにかくキューに何かが入るまでプロセッサをスリープさせる場合、これは自動的にそれを行うだけです。ソースが先プロデューサーの取得する場合と、ソースを自動的に呼び出すためのプロデューサーを待つことになるhasNext
とnext
。
一方、あなたはからデータをつかんソースたい場合は、そのことができるようにして、プロセッサが追いつくまで、それを備蓄速いようなソースではないし、複数のthreads-- -プロセスのプロセッサは、キューを待って周りに座っをより複雑な場合、良いアイデアのように見え始めます。これで、ソースは実行速度が速くなるとデータを積み重ねることができ(その制限はおそらくディスクI / Oのようなものです)、プロセッサは実行速度が高くなるとパイルのサイズを縮小できます(制限は永続性の速さです)モジュールはデータを永続化できます)。