最大限度地提高同时下载的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个响应时间。
希望能帮助别人。