最大化同时http下载的数量

时间:2013-02-26 12:38:01

标签: ios objective-c

我试图尽可能多地同时执行http下载IPad2(ios6.0)。这纯粹用于测试此设备上可能的内容。甚至对GUI性能不感兴趣(如果没有响应则不重要)

我创建了一个特殊的HTTP服务器,它向客户端发送x分钟数据。收到的数据并不重要。我只测量了多少并发下载的速度。 我已经实现了两种不同的方式来安排12个HTTP请求。

的NSOperation

通过在队列中使用NSOperation对象并在12上设置NSOperationQueueDefaultMaxConcurrentOperationCount来完成一个

NSThread

第二个实现是创建12个执行同步http请求的NSThread。

请求全部发送到同一目标IP。

观察

我观察到的是,在这两种情况下,第6到第12个请求都得到一个TimeOut(错误代码-1001)。如果1将超时值设置为80.0秒,我看到第1次完成后第6次下载开始。

问题

  • IOS是否限制了多少并发下载?
  • 还有其他方法可以执行这些并发下载吗?
  • 有没有办法将线程绑定到核心(以便它不会得到中断,如C ++中的cpuaffinity)或线程优先级

4 个答案:

答案 0 :(得分:18)

同一服务器最多可以同时连接5个。这是iOS固定限制,可能是因为某些http协议限制。您可以阅读更多信息here

答案 1 :(得分:2)

在查看项目之后,我在Apple's documentation找到了NSURLSessionConfiguration的内容。

来自Apple的文档 -

  

此属性确定最大同时数   基于此的会话中的任务与每个主机建立的连接   配置。

     

此限制是针对每个会话的,因此如果您使用多个会话,则应用   整体可能超过这个限制。另外,取决于你的   连接到Internet,会话可能使用的下限   你指定的那个。

     

OS X中的默认值为6,iOS中的默认值为4。

答案 2 :(得分:1)

  

IOS中是否存在对并发下载量的限制?

顺便说一句,这是基于每个服务器的限制,而不是iOS限制。如果您尝试同时从不同的服务器执行此操作,您将看到可以超出当前限制。

  

还有其他方法可以执行这些并发下载吗?

显然你也可以用GCD做一些事情,手动管理并发请求,但我认为NSOperationQueue是一个很好的解决方案,并且没有理由进一步看待它。我当然也不认为使用线程有任何好处。

随着并发请求数量的增加,你应该对总的经过时间进行基准测试,但我相信你会达到收益递减的程度。只是拥有更多并发请求并不能确保更好的总体性能。

答案 3 :(得分:0)

如果有人还在寻找,只是碰到这个。我在iPhone6S +上看到它同时是4。这是我的测试步骤:

  • 我写了一个PHP脚本,在回显之前做了睡眠(10)。
  • 我添加了一个按钮(所以我可以在启动后执行得很好)
  • 点击该按钮会同时触发30个NSURLConnections(同步请求,但每个都在一个单独的线程中)和一个NSLog。
  • 每个完成NSLog

结果就像发条一样。第一个响应(其中4个)在请求后12秒返回(大概是2秒打开无线电或其他),但随后每个4个响应的块在前一个块4后10秒后出现。所有4个响应时间。

希望能有所帮助。