2

リソースへのアクセスをシリアル化するために、ブロックよりもシリアル ディスパッチ キュー (高い優先度またはデフォルトの優先度を想定) を使用すると、パフォーマンスが向上しますか? @synchronizedゲインとは、同期メカニズム自体によるオーバーヘッドの違いを意味します。

4

1 に答える 1

3

そうです。ただし、セマンティクスにも違いがあります。@synchronized ブロックは、サイドテーブルで再帰的で例外セーフなミューテックスを使用します。これらのプロパティはすべて、追加のオーバーヘッドにつながります。dispatch_queue_t は非常に軽量ですが (特に、dispatch_*_f を使用して Block_copy() を回避する場合)、再帰的ではなく、例外を処理せず、特定のスレッドを保証しません。

個人的には、再帰的なロックは悪い考えであり、Cocoa アプリで例外をキャッチするべきではありません。そのため、@synchronized にはほとんど魅力がありません。

今後の編集: 新しい os_unfair_lock は、どちらよりもオーバーヘッドが大幅に低くなります

于 2013-09-03T17:04:57.093 に答える