2012-05-13 3 views
0

Я новый ios, и я не знаю, как производительность NSThread многопотоковая на IOS. Я есть функцияМногопоточность медленная?

-(void) writeBlock:(NSString *)srcPath toPath:(NSString *)destPath fromIndex:(int)fIndex toIndex:(int)tIndex 
{ 
    //create file handle for srcPath and destPath 
    for(int i=fIndex;i<=tIndex;i++){ 
     //read from source filehandle 
     //write to dest filehandle 
    } 
    //close filehandle. 
} 

Если я создать одну нить для вышеупомянутой функции, время для выполнения этой функции является 1 секунда. Но когда я создаю:

for(int i=0;i<20;i++) 
{ 
    [NSThread detachNewThreadSelector: @selector(writeBlock:) toTarget:self withObject:myObject]; 
    //for each thread, tIndex-fIndex is the same with tIndex-fIndex of single above thread 
} 

Время выполнения 20 потоков является 13-16seconds. Я думаю, что время будет 1-5 секунд. Многоминутный поток медленный? Может кто-нибудь мне помочь? Большое спасибо

+1

Есть некоторые накладные расходы, связанные с нерестами новых потоков. Кроме того, если все эти потоки пытаются читать из файловой системы (возможно, тот же файл?), Это также приведет к появлению дополнительных накладных расходов, поскольку они борются за доступ к файловой системе. – UIAdam

ответ

0

Одноядерные процессоры для смартфонов могут обрабатывать столько. Создание 20 потоков на iPhone значительно замедлит производительность - создание потоков дорого. Другой способ создания низкоуровневого NSThread использует NSOperation или NSOperationQueue - см. Также этот this поток на StackOverflow.

Кроме того, запись/чтение в/из памяти может выполняться только по одному потоку за раз.

0

Thats, потому что вы пытаетесь читать и записывать файлы на диск. Существует только один диск. Поэтому, если вы попытаетесь прочитать и записать один диск 20 раз одновременно. он медленный. Например, если вы скопируете 20 файлов на USB-накопитель, это довольно быстро. Но если вы попытаетесь скопировать 20 по одному (перетаскивая их на USB-накопитель один за другим, а предыдущий файл еще не скопирован), это будет очень медленно.