多线程很慢?

时间:2012-05-13 18:44:00

标签: ios multithreading nsthread

我是新的ios,我不知道NOS在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秒。多线程很慢? 任何人都可以帮助我吗?非常感谢

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

单核智能手机处理器只能处理这么多。在iPhone上创建20个线程将大大降低性能 - 创建线程非常昂贵。 创建低级NSThread的另一个选项是使用NSOperationNSOperationQueue - 另请参阅StackOverflow上的此this主题。

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