Сомнения относительно различий между GCD и классом потоков - PullRequest
1 голос
/ 12 марта 2012

1) Я создаю приложение ios, в котором мне нужно сканировать пул IP-адресов. Каждый из них может занять время, поэтому я хочу реализовать многопоточность в своем приложении. Я собирался использовать класс потоков, но у меня есть сомнения относительно того, сколько потоков мы можем создать одновременно. В руководстве developer.apple упоминается, что каждый поток занимает 512 КБ памяти. Итак, разве это не заставит мое приложение зависнуть, предположим, я создаю 100 потоков или может быть больше того?

2) одно сомнение в отношении потоков: каждый поток создает свой собственный объект (для работы), когда я передаю один и тот же объект всем потокам. 3) если я пойду на GCD (грандиозная центральная диспетчеризация), тогда у меня есть какое-то преимущество? то есть, это помогло бы мне в этой конкретной ситуации.

3) И последнее. Каков наилучший способ выполнить задачу, которая похожа, но должна выполняться одновременно (для повышения производительности). Замечания: Все эти потоки используют один и тот же объектный метод для выполнения задачи.

Спасибо и привет, если я звучу странно

1 Ответ

0 голосов
/ 08 апреля 2012

IMO, самое простое, что нужно сделать - это выполнить сканирование в одном потоке (или в одном блоке dispatch_async'd), а затем использовать kqueue для эффективной обработки результатов.API kqueue требует некоторого привыкания, но это эффективный способ сделать то, что вы хотите.Основная идея такова:

  1. создание очереди
  2. создание неблокирующих сокетов
  3. вызов коннекта на каждом сокете
  4. добавление сокетов к вашемуkqueue так, чтобы он проснулся ваш поток, когда соединение успешно или время ожидания.man kqueue для деталей, как это сделать.
  5. в цикле, вызовите kevent.Это будет блокировать, пока вы kqueue не совпадет с ожидаемым событием (тайм-аут или соединение установлено).Выйдите из потока, если для мониторинга не осталось гнезд.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...