6

私のプログラムは、着信要求を処理するサーバーです。有効な各リクエストはラップされNSOperation、通常の に渡されますNSOperationQueue

それぞれNSOpearationがその要求を処理します。場合によっては、(同時キュー)、(値を設定するとき)、および(値を取得するとき) をNSDictionary使用して、このスレッドセーフにするために競合が発生します。dispatch_queuedispatch_barrier_asyncdispatch_syncNSDictionary

100 個のリクエストを同時に実行してプログラムをテストすると、プロセスがフリーズすることがあります。SIGSEGVクラッシュログを表示するためにプロセスを強制終了します。

ほとんどのスレッドdispatch_syncがこのキューでスタックしています。そして、下に注意書きがあります

Dispatch Thread Soft Limit Reached: 64 (同期操作でブロックされたディスパッチ スレッドが多すぎます)

このメモの本当の意味は何ですか?その動作は何ですか?この制限に関する情報が見つかりません。この問題を解決するにはどうすればよいですか?

この問題を回避するには、2 つの方法が考えられます。(私はそれらをテストし、後で更新します)

  1. dispatch_semaphoreこの同時キューへのブロックの送信を制限するために使用します。
  2. maxConcurrentOperationCountの限界NSOperationQueue

より良い解決策はありますか?

4

1 に答える 1