Это связано с API Grand Central Dispatch используется в Objective-C, со следующими кодами:Как работают очереди и потоки?
dispatch_queue_t downloadQueue = dispatch_queue_create("other queue", NULL);
dispatch_async(downloadQueue, ^{
....some functions that retrieves data from server...
dispatch_async(dispatch_get_main_queue(), ^{
NSLog(@"got it");
});
});
dispatch_release(downloadQueue);
Мое текущее понимание того, как работают очереди в том, что блоки в очереди будут идти на нитку для этого очередь. Таким образом, две очереди станут двумя потоками. При многопоточности эти две очереди будут выполняться одновременно. Тем не менее, «получил это» появляется сразу, когда программа получила данные. Как это произошло?
Пожалуйста, укажите, хотите ли вы исправить или добавить мое понимание потоков и очереди.
«Это единственная очередь, задачи которой * гарантированы * выполняются в главном потоке программы». Dispatch_sync() из основного потока в другую очередь часто выполняется без создания другого потока выполнения, то есть на главной нить. –
Спасибо за исправление, Эшли. –
@OleBegemann, если программа работает на iPhone с одним ядром. Будет ли окончательная связь между количеством потоков и количеством очередей? –