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 ~ 16 秒です。時間は1~5秒くらいになると思います。マルチスレッドって遅いですか?誰でも私を助けることができますか?どうもありがとう

4

2 に答える 2

0

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

于 2012-05-13T18:51:03.443 に答える
0

シングルコアのスマートフォン プロセッサが処理できる量は限られています。iPhone で 20 個のスレッドを作成すると、パフォーマンスが大幅に低下します。スレッドの作成にはコストがかかります。低レベルを作成する別のオプションはorNSThreadを使用することです- StackOverflow のこのスレッドも参照してください。NSOperationNSOperationQueue

さらに、メモリへの書き込み/メモリからの読み取りは、一度に 1 つのスレッドでしか実行できません。

于 2012-05-13T18:51:49.923 に答える