Я, может казаться, не нахожу это нигде, но я уверен, что должен быть ответ...
Сколько одновременных HTTP-соединений приложение для iPhone может обслужить? Другими словами, если я создаю и выполняю набор NSURLConnections асинхронно, сколько может быть в полете, прежде чем он начнет ставить их в очередь?
Кроме того, есть ли метод для проверки, сколько потоков доступно и/или используемо программно?
Я пытаюсь записать интеллектуальный механизм упреждающей выборки, и эти пределы (если таковые имеются) были бы полезной информацией.
iPhone не начинает ставить в очередь NSURConnection
ы. Это полностью ваша ответственность. iPhone будет запускать все ваши асинхронные NSURLConnection
ы параллельно. Единственное, что остановит его - это ваша память :) Недавно я реализовал пул соединений (мое решение было основано на NSOperationQueue
) только из-за этого. Теперь я могу контролировать параллельные соединения, и мое приложение не падает при загрузке сотен изображений аватаров.
По поводу вашего второго вопроса. На самом деле я не знаю, как получить список текущих потоков. Я просмотрел NSThread
API, но не нашел никаких признаков API для этого...
Итак, причина, по которой я предположил, что на уровне мобильной ОС может существовать ограничение на одновременное соединение, заключается в том, что многие мобильные браузеры его соблюдают. Существуют методы ускорения загрузки мобильной версии вашего сайта за счет того, чтобы обеспечить как можно меньшее количество дополнительных подхватов контента. Изображения - главный виновник, но css-файлы, файлы javascript и т.д. - все они требуют дополнительного подключения.
В мобильных устройствах установка и разрыв соединения обходится гораздо дороже, чем одно соединение с большим количеством данных, поэтому одним из методов повышения производительности загрузки страницы является встраивание CSS и javascript в саму страницу.
Похоже, что это ограничение может отсутствовать в самой ОС, по крайней мере, на платформе iphone.
Что касается ответа на этот вопрос, я нашел этот пост, в котором обсуждаются практические ограничения одновременных подключений. Это не жесткое ограничение, но я думаю, что оно отвечает на суть вопроса.
Background threads consuming 100% CPU on iPhone 3GS causes latent main thread