我是新的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秒。多线程很慢? 任何人都可以帮助我吗?非常感谢
答案 0 :(得分:0)
这是因为您尝试在磁盘上读写文件。只有一个磁盘。因此,如果您尝试一次读取和写入一个磁盘20次。它很慢。例如,如果您将20个文件复制到USB记忆棒,则速度非常快。但是如果你试图逐个复制20个(将它们一个一个地拖到USB记忆棒上,而之前的文件还没有被复制),它将非常慢。
答案 1 :(得分:0)
单核智能手机处理器只能处理这么多。在iPhone上创建20个线程将大大降低性能 - 创建线程非常昂贵。
创建低级NSThread
的另一个选项是使用NSOperation
或NSOperationQueue
- 另请参阅StackOverflow上的此this主题。
此外,只能通过一个线程一次完成对内存的写入/读取。