Пулы потоков в CocoaTouch? - PullRequest
       11

Пулы потоков в CocoaTouch?

1 голос
/ 27 октября 2009

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

В типичном потоке для создания нового потока вы должны настраивать пул автоматического выпуска каждый раз, когда вызывается точка входа в поток. Кажется, что производительность для этой операции может быть тривиальной в соответствии с http://www.mikeash.com/?page=pyblog/autorelease-is-fast.html, но я хочу избежать затрат, связанных с настройкой и разрушением множества этих потоков во время выполнения моего приложения. В других фреймворках / языках я только что получил пустой поток и заставил его работать. По завершении работы поток возвращается обратно в пул.

Я не вижу никаких объектов пула потоков в iPhone SDK, только NSThread. Какой хороший способ сделать это?

Как я настраиваю свою тему:

// create thread using supplied entry point
[NSThread detachNewThreadSelector:@selector(myMethod) 
        toTarget:self 
        withObject:nil];

// thread entry-point
- (void)myMethod {
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    *** code that should be run in the new thread goes here ***

    [pool release];
}

Ответы [ 3 ]

4 голосов
/ 27 октября 2009

Способ, которым вы хотите это сделать, - использовать NSOperationQueue, который будет содержать очередь задач, которые должны быть выполнены, и выполнять столько параллелей, сколько вы хотите (настраивается), каждый в фоновом потоке. Я предполагаю, что реализация повторно использует потоки после завершения данной операции.

Вы используете NSOperationQueue в сочетании с NSOperations - у вас могут быть либо синхронные вызовы (поскольку вся работа выполняется в фоновом потоке), либо вы все равно можете выполнять асинхронные вызовы с небольшой дополнительной работой (нужно определить еще несколько методы).

Вот учебник , который вы можете найти полезным.

0 голосов
/ 27 октября 2009

Я думаю, что другие ответы найдены в NSOperationQueue, но ради полноты вы должны знать об этих проектах:

  • PLBlocks (компилятор + поддержка времени выполнения для блоков на iPhone)
  • WiganWallgate (реализация большой центральной отправки на iPhone)
0 голосов
/ 27 октября 2009

Я бы рекомендовал использовать NSOperationQueue для того, что вы хотите. Вы можете установить количество потоков в очереди.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...