私のプログラムは、着信要求を処理するサーバーです。有効な各リクエストはラップされNSOperation
、通常の に渡されますNSOperationQueue
。
それぞれNSOpearation
がその要求を処理します。場合によっては、(同時キュー)、(値を設定するとき)、および(値を取得するとき) をNSDictionary
使用して、このスレッドセーフにするために競合が発生します。dispatch_queue
dispatch_barrier_async
dispatch_sync
NSDictionary
100 個のリクエストを同時に実行してプログラムをテストすると、プロセスがフリーズすることがあります。SIGSEGV
クラッシュログを表示するためにプロセスを強制終了します。
ほとんどのスレッドdispatch_sync
がこのキューでスタックしています。そして、下に注意書きがあります
Dispatch Thread Soft Limit Reached: 64 (同期操作でブロックされたディスパッチ スレッドが多すぎます)
このメモの本当の意味は何ですか?その動作は何ですか?この制限に関する情報が見つかりません。この問題を解決するにはどうすればよいですか?
この問題を回避するには、2 つの方法が考えられます。(私はそれらをテストし、後で更新します)
dispatch_semaphore
この同時キューへのブロックの送信を制限するために使用します。maxConcurrentOperationCount
の限界NSOperationQueue
より良い解決策はありますか?