dispatch_async和[NSURLConnection sendSynchronousRequest]

ban*_*isa 6 nsurlconnection grand-central-dispatch ios

围绕这个主题存在各种各样的问题,并且许多建议说不要在dispatch_async中使用sendSynchronousRequest,因为它会阻塞线程,并且GCD将产生许多新的工作线程来为所有同步URL请求提供服务.

似乎没有人对iOS 5,[NSURLConnection sendAsynchronousRequest:queue:completionHandler:]在幕后做什么有明确的答案.

我读过的一篇文章指出它可能"优化",并且"可能"使用运行循环 - 但肯定不会为每个请求创建一个新线程.

当我在使用sendAsynchronousRequest:queue:completionHandler时暂停我的调试器时,堆栈跟踪如下所示:

截图

..现在看来sendAsynchronousRequest:queue:completionHandler实际上正在调用sendSynchronousRequest,当我使用async方法而不是sync方法时,我仍然创建了大量的线程.

是的,使用异步调用还有其他好处,我不想在这篇文章中讨论.

所有我感兴趣的是性能/线程/系统使用,如果我更糟糕的是在dispatch_async中使用同步调用而不是使用异步调用.

我也不需要使用ios4异步调用的建议,这纯粹是出于教育目的.

有没有人对此有任何有见地的答案?

谢谢

Ste*_*wig 0

这实际上是开源的。http://libdispatch.macosforge.org/

您不太可能比 Apple 的实现更有效地管理工作线程。在这种情况下,“异步”并不意味着选择/轮询,它只是意味着调用将立即返回。因此,该实现产生线程也就不足为奇了。