2012-05-13 16 views
0

私は新しいiosです。IOS上のマルチスレッドのNSThreadのパフォーマンスは分かりません。 私は上記の機能のための単一のスレッドを作成する機能にマルチスレッドは遅いですか?

-(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を作成する別のオプションは、NSOperationまたはNSOperationQueueを使用しています - このthisもまたStackOverflowのスレッドを参照してください。

また、メモリへの書き込み/読み出しは、一度に1つのスレッドでしか行えません。

0

ディスクにファイルを読み書きしようとしているからです。ディスクは1つだけです。したがって、一度に1つのディスクを20回読み書きしようとすると。それは遅いです。たとえば、20個のファイルをUSBスティックにコピーするとかなり高速です。しかし、20枚を1枚ずつコピーしようとすると(1枚ずつUSBスティックにドラッグしますが、前のファイルはまだコピーされません)、非常に遅くなります。

関連する問題