リソースへのアクセスをシリアル化するために、ブロックよりもシリアル ディスパッチ キュー (高い優先度またはデフォルトの優先度を想定) を使用すると、パフォーマンスが向上しますか? @synchronized
ゲインとは、同期メカニズム自体によるオーバーヘッドの違いを意味します。
1 に答える
3
そうです。ただし、セマンティクスにも違いがあります。@synchronized ブロックは、サイドテーブルで再帰的で例外セーフなミューテックスを使用します。これらのプロパティはすべて、追加のオーバーヘッドにつながります。dispatch_queue_t は非常に軽量ですが (特に、dispatch_*_f を使用して Block_copy() を回避する場合)、再帰的ではなく、例外を処理せず、特定のスレッドを保証しません。
個人的には、再帰的なロックは悪い考えであり、Cocoa アプリで例外をキャッチするべきではありません。そのため、@synchronized にはほとんど魅力がありません。
今後の編集: 新しい os_unfair_lock は、どちらよりもオーバーヘッドが大幅に低くなります
于 2013-09-03T17:04:57.093 に答える