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-16 秒。我认为时间将是 1-5 秒。多线程很慢?任何人都可以帮助我吗?非常感谢

4

2 回答 2

0

那是因为您尝试在磁盘上读写文件。只有一张磁盘。因此,如果您尝试一次读取和写入一个磁盘 20 次。它很慢。例如,如果您将 20 个文件复制到 USB 记忆棒,它会非常快。但是如果你尝试一个一个地复制20个(一个一个地拖到U盘上,而之前的文件还没有复制)会很慢。

于 2012-05-13T18:51:03.443 回答
0

单核智能手机处理器只能处理这么多。在 iPhone 上创建 20 个线程会大大降低性能 - 创建线程的成本很高。创建低级别的另一个选项NSThread是使用NSOperationNSOperationQueue- 另请参阅StackOverflow 上的这个线程。

此外,一次只能由一个线程完成对内存的写入/读取。

于 2012-05-13T18:51:49.923 回答