2012-05-13 179 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

單核智能手機處理器只能處理這麼多。在iPhone上創建20個線程會顯着降低性能 - 創建線程非常昂貴。 創建低級NSThread的另一選擇是使用NSOperationNSOperationQueue - 另請參閱StackOverflow上的此this線程。

而且,一次只能由一個線程完成對內存的寫入/讀取操作。

0

那是因爲您嘗試讀取和寫入磁盤上的文件。只有一個磁盤。因此,如果您嘗試一次讀取和寫入一個磁盤20次。它很慢。例如,如果您將20個文件複製到USB記憶棒,速度非常快。但是如果你試圖一個接一個地複製20個(將它們一個接一個地拖到USB盤上,而前一個文件沒有被複制),它會非常慢。