NSOperationを使った並列処理

はてブされてたこちらの記事で初めてNSOperationという機能について知る。へぇ、Leopardで追加されたんだ。迂闊。
こちらが本家解説かな?:http://developer.apple.com/documentation/Cocoa/Reference/NSOperation_class/Reference/Reference.html

NSOperationオブジェクトをNSOperationQueueに突っ込むと、システムがそのNSOperationオブジェクトを別スレッドで実行してくれると。
で、どうも、concurrentとnon-concurrentという区別があるらしく、(紛らわしい名前だと思うけど)どうやらnon-concurrentの場合はオブジェクトごとにスレッドが作られ、concurrentの場合はそうでは無いみたい。concurrentの場合は、IntelのThreading Building Blocksのように、あるスレッドはオブジェクトのstartメソッドを呼び出して、終わったら次のオブジェクトを取り出して以下同様、というようにやるんだろうなぁ。

面白いなと思ったのが、dependencyという概念。NSOperationオブジェクト間のdependencyを指定できて、あのオブジェクトの実行が終わらないとこのオブジェクトは開始できませんよ、というようなことができるみたい。ふむ、これは面白い。普通の発想だと(PARDSやいわゆるFutureみたいに)データを介して依存関係を指定するんだけど、タスク間の依存を直接書かせるという。案外合理的かもしれんなぁ。
もちろん、タスクの実行が終了する前に、別のタスクの実行を可能にしたい、という要件には対応できないんだけれど、それは別オブジェクトに分けるということなんだろう。non-concurrentの場合はスレッドができちゃうから若干重いけど。