@synchronized と dispatch_semaphore_wait/signal の性能比較

iOS/Macの開発における排他制御はいろいろあるけれども、とりあえず簡単なのでいつも @synchronized{} を使ってしまうんだがちょいと性能が気になったので測ってみた。

iPhone5で @synchronized{} を100万回繰り返すと 1171.550989ミリ秒だった。

比較として、dispatch_semaphore_wait/signal に置き換えて100万回繰り返したところ、 169.719994ミリ秒だった。

7倍違う。

細かい排他ロックが超大量に発生する場合は dispatch_semaphore_tが良いようだ。

まあでも100万回も呼ばれるんでなければ @syncronized でいいよね。楽だし。

NSThread系やpthread系、その他の排他処理は計測してない。面倒っちょいので。