2012-05-13 6 views
0

저는 새로운 IOS입니다. IOS에서 다중 스레드 인 NSThread의 성능을 알지 못합니다. 제가 상기 기능을위한 단일 스레드를 생성하는 경우 I 함수를다중 스레드가 느립니까?

-(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 초가 될 것 같습니다. 멀티 스레드가 느린가요? 아무도 도와 줄 수 있습니까? 고마워요

+1

새 스레드를 생성하는 데 약간의 오버 헤드가 있습니다. 또한 이러한 모든 스레드가 파일 시스템 (아마도 동일한 파일)에서 읽으려는 경우 파일 시스템 액세스를 위해 추가 오버 헤드가 발생합니다. – UIAdam

답변

0

싱글 코어 스마트 폰 프로세서 만 처리 할 수 ​​있습니다. iPhone에 20 개의 스레드를 생성하면 성능이 크게 저하 될 수 있습니다. 스레드를 만드는 데 많은 비용이 듭니다. 하위 수준 NSThread을 만드는 또 다른 옵션은 NSOperation 또는 NSOperationQueue입니다.이 내용도 StackOverflow의 this 스레드를 참조하십시오.

또한 메모리에 쓰기/읽기는 한 번에 하나의 스레드 만 수행 할 수 있습니다.

0

디스크에 파일을 읽고 쓰려고하기 때문에 그게 전부입니다. 디스크는 하나뿐입니다. 그래서 한 번에 하나의 디스크 20 번 읽고 쓰려고하면. 천천히. 예를 들어 20 개의 파일을 USB 스틱에 복사하면 꽤 빠릅니다. 그러나 20 개를 하나씩 복사하려고하면 (이전 파일이 아직 복사되지 않은 상태에서 하나씩 USB 스틱으로 끌어다 놓음) 매우 느려집니다.

관련 문제