сколько потоков слишком много в iphone / target-c dev - PullRequest
1 голос
/ 12 апреля 2011

У меня есть сложная синхронизация, которая выполняет несколько асинхронных вызовов контента по HTTP.Каждый раз, когда этот контент получен, он запрашивает следующий бит и так далее.Все они связаны последовательно в большом общем задании по синхронизации с данными на сервере.

В этой цепочке заданий, вероятно, 12 шагов.Кажется, он зависает после 5-го асинхронного запроса, запрос никогда не возвращается и зависает, ожидая его.Я думаю, что это может быть связано с созданием слишком большого количества потоков, потому что, если я запускаю тот, в котором он висит в начале, он возвращается нормально.

В том виде, как я себе это представляю, главный поток спрашиваетдля асинхронного контента а.Когда он возвращается в свое собственное асинхронное время, он порождает новый поток, который затем запрашивает aync контент b.Когда он возвращается в свое приятное время, он порождает новый поток, который затем запрашивает содержание c.Разве новый поток не создается каждый раз, когда асинхронный запрос возвращает результат?

Правильно ли я последовательно соединяю эти запросы?Я был довольно хорош в потоках в разработке Java, но я немного запутался в том, как они работают в Obj-C.Нужно ли мне использовать пул потоков, скажем, из трех потоков, и использовать их повторно?

Извините за вопрос высокого уровня, но я уверен, что некоторые эксперты могут помочь очистить облако таинственности от этого.

1 Ответ

2 голосов
/ 12 апреля 2011

NSOperationQueues построен поверх Grand Central Dispatch. Если вам нужен точный контроль над порядком операций и возможность отправлять синхронные запросы, вы можете использовать GCD напрямую. Используя любой из них, вам не нужно беспокоиться о создании / управлении потоками. Вы просто ставите свои операции в очередь, как того требует ваше приложение.

Документация Apple хороша в этом ИМХО, но вы можете найти там множество учебников.

[РЕДАКТИРОВАТЬ: добавлена ​​ссылка на документы Apple]

http://developer.apple.com/library/ios/#documentation/General/Conceptual/ConcurrencyProgrammingGuide/Introduction/Introduction.html

...