2012-05-13 42 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盘上,而前一个文件没有被复制),它会非常慢。