最大限度地提高同时下载的http数量

我试图执行尽可能多的同时HTTP下载IPad2(ios6.0)。 这纯粹是为了testing这个设备上的可能性。 即使对GUI性能不感兴趣(如果不响应,也不重要)

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

的NSOperation

一个是通过在队列中使用NSOperation对象,并设置NSOperationQueueDefaultMaxConcurrentOperationCount 12

NSThread

第二个实现是通过创build12个执行同步http请求的NSThread。

这些请求全部发送到相同的目标IP。

意见

我观察到,在这两种情况下,第6到第12请求得到一个超时(errorcode -1001)。 如果将timeout-value设置为80.0秒,则会看到第一次完成时第六次下载开始。

问题

  • IOS中有多less个并发下载限制?
  • 有没有其他的方式来执行这些并发下载?
  • 有没有办法将一个线程绑定到一个核心(这样它就不会像C ++中的cpuaffinity那样获得中断)或线程优先级

您最多可以有5个同时连接到同一台服务器。 这是一个iOS固定的限制,这可能是由于一些HTTP协议的限制。 你可以在这里阅读更多信息。

在研究这个项目之后,我在Apple的 NSURLSessionConfiguration 文档中find了一些东西。

从苹果的文档 –

此属性确定基于此configuration的会话中由任务执行的每个主机同时连接的最大数目。

此限制是每个会话,所以如果您使用多个会话,则整个应用程序可能会超出此限制。 此外,根据您的Internet连接,会话可能会使用比指定的更低的限制。

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

IOS中有多less个并发下载限制?

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

有没有其他的方式来执行这些并发下载?

很明显,你也可以用GCD来做一些手动pipe理并发请求的工作,但是我认为NSOperationQueue是一个很好的解决scheme,看不出有什么理由可以进一步研究。 我当然也没有看到使用线程的好处。

您应该根据并发请求数量的增加来衡量总的运行时间,但是我相信您会遇到收益递减的问题。 只有更多的并发请求不能保证更好的总体性能。

如果有人仍然在寻找,这只是一个颠簸。 我在iPhone6S +上看到它是同步的。 这是我的testing步骤:

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

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

希望能帮助别人。