dispatch_create_queueを使うときの勘違い

久々エントリ。

queue を作るとき、dispatch_create_queue の第1引数に名前を指定する。 ところが、すでに同じ名前の queue があるからといって、その queue が再利用されるわけではない

例えば、以下のコードはqueueの生成コストがすごく無駄

ドキュメントに書いてあるけど、このラベルは本質的に意味はなくて、デバッグ時の queue の識別子として使われるだけであった。

label

A string label to attach to the queue to uniquely identify it in debugging tools such as Instruments, sample, stackshots, and crash reports. Because applications, libraries, and frameworks can all create their own dispatch queues, a reverse-DNS naming style (com.example.myqueue) is recommended. This parameter is optional and can be NULL.

だから、上のソースコードは「1個のキューに対して、100個のタスクが直列に実行」されるわけではなく、「100個のキューに対して、1個のタスクが直列に実行」される。よって実質的には並列キューみたいにタスクが実行される。

参考