我的程序是一个处理传入请求的服务器。每个有效的请求都被包装NSOperation
并传递给一个普通的NSOperationQueue
.
每个NSOpearation
处理它的请求。NSDictionary
在某些情况下,我使用dispatch_queue
(并发队列)、dispatch_barrier_async
(当设置值时)和dispatch_sync
(当获取值时)使这个NSDictionary
线程安全时存在争用。
我同时用 100 个请求测试我的程序,然后进程有时会冻结。我终止进程SIGSEGV
以查看崩溃日志。
大多数线程都停留在dispatch_sync
此队列中。并且下面有一个注释
已达到调度线程软限制:64(同步操作中阻塞的调度线程过多)
这个注释的真正含义是什么?它的行为是什么?我找不到有关此限制的信息。我该如何解决这个问题?
我可以想到两种可能的方法来避免这个问题。(我将对其进行测试并将稍后更新)
- 用于
dispatch_semaphore
限制将块提交到此并发队列。 maxConcurrentOperationCount
的限制NSOperationQueue
你有更好的解决方案吗?