Ответ 1
У вас может быть не более 5 одновременных подключений к одному и тому же серверу. Это фиксированный лимит iOS, и, вероятно, это связано с некоторыми ограничениями протокола HTTP. Вы можете прочитать немного больше здесь.
Я пытаюсь выполнить как можно больше одновременных http-загрузок IPad2 (ios6.0). Это чисто для тестирования того, что возможно на этом устройстве. Даже не заинтересован в производительности графического интерфейса (не важно, если он не отвечает)
Я создал специальный HTTP-сервер, который отправляет клиенту данные за x минут. Полученные данные не имеют значения. Я просто измеряю скорость, сколько одновременных загрузок. Я реализовал два разных способа планирования 12 HTTP-запросов.
Один выполняется с помощью объектов NSOperation в очереди и устанавливает NSOperationQueueDefaultMaxConcurrentOperationCount на 12
Вторая реализация - это создание 12 NSThreads, которые выполняют синхронизирующий HTTP-запрос.
Все запросы отправляются на тот же IP-адрес назначения.
Я наблюдаю, что в обоих случаях с 6-го по 12-й запрос получают TimeOut (код ошибки -1001). Если 1 поставить значение тайм-аута в 80,0 секунд, я вижу, что 6-я загрузка начинается с 1-го завершения.
У вас может быть не более 5 одновременных подключений к одному и тому же серверу. Это фиксированный лимит iOS, и, вероятно, это связано с некоторыми ограничениями протокола HTTP. Вы можете прочитать немного больше здесь.
После изучения этого проекта я нашел что-то в документации Apple для NSURLSessionConfiguration.
Из документации Apple -
Это свойство определяет максимальное количество одновременных соединения, сделанные для каждого хоста задачами в сеансах на основе этого конфигурации.
Это ограничение за сеанс, поэтому, если вы используете несколько сеансов, ваше приложение в целом может превышать этот предел. Кроме того, в зависимости от вашего подключение к Интернету, сеанс может использовать нижний предел, чем который вы укажете.
Значение по умолчанию - 6 в OS X или 4 в iOS.
Есть ли в IOS ограничение на количество одновременных загрузок?
Это, кстати, ограничение на сервер, а не ограничение iOS. Если вы попытаетесь сделать это с разных серверов одновременно, вы увидите, что вы можете превысить свой текущий предел.
Есть ли другой способ выполнить эти параллельные загрузки?
Очевидно, что вы можете что-то делать с GCD, вручную управляя параллельными запросами, но я думаю, что NSOperationQueue
- отличное решение и не видит причин смотреть дальше. Я также не вижу никаких преимуществ для использования потоков.
Вы должны сравнить общее количество прошедшего времени с увеличением количества одновременных запросов, но я уверен, что вы достигнете точки уменьшения прибыли. Просто наличие большего количества одновременных запросов не обеспечивает лучшую общую производительность.
Просто удар на это, если кто-то все еще смотрит. Я вижу, что это 4 одновременных на моем iPhone6S+. Вот мои тестовые шаги:
Результаты похожи на часы. Первые ответы (4 из них) возвращаются через 12 секунд после запроса (предположительно 2 секунды, чтобы включить радио или что-то еще), но затем каждый последующий блок из 4 ответов приходит через 10 секунд после предыдущего блока 4. Все 4 на время.
Надеюсь, что это поможет кому-то.