UPDATE몇 가지 조사 후 멀티 스레드 응용 프로그램
에 AFNetworking에서 응답 시간을 측정 나는 내 코드에 약간의 개선을했다. 먼저 시간을 측정 한 각 위치를 다음과 같이 교체합니다. 다음과 같은 원자 시간 측정을 사용합니다. CFAbsoluteTimeGetCurrent();
아무런 차이가 없었던 것으로 나타났습니다. 우리 서버 녀석과 확인해 보니 나는 서버가 인상적인 결과를 보여 주었다는 것을 알았습니다.이 때문에 병목 현상은 서버가 아니라 랩탑/그 밖의 다른 지점으로 생각됩니다.
내가 응용 프로그램에서 사용자 흐름을 모방 시나리오를 구축, 그래서 내 서버를 테스트로드하기 위해 노력하고있어
원래 게시 할 수 있습니다. 이 흐름에는 서버에 약 11-17 건의 호출이 포함되어 있으며 일부는 다른 화면을 통과하지 않으면 사용자가 특정 화면에 도달 할 수 없기 때문에 동기식이어야합니다.
그런 다음이 시나리오를 X
스레드를 사용하여 동시에 실행하여 서버에 스트레스를 가하고 가장 취약한 링크가있는 곳을 확인하려고했습니다. 정보를 분석하기 위해 응답이 성공하거나 실패 할 때마다 파일에 관련 정보를 기록했으며 각 호출의 타이밍에 매우 이상한 일이 일어나고 있음을 알았습니다.
test.startTime = [NSNumber numberWithDouble:[[NSDate date] timeIntervalSince1970]];
//fire the request
[operation start];
그리고 성공에 일이 제일 먼저/실패 블록은 다음과 같습니다
성공
void (^successWrapper) (AFHTTPRequestOperation *, id) = ^(AFHTTPRequestOperation *operation, id responseObject){
//#################TEST ANALYTICS###############
NSDate *endTime = [NSDate date];
test.endTime = [NSNumber numberWithDouble:[endTime timeIntervalSince1970]];
test.lat = [NSNumber numberWithDouble:(test.endTime.doubleValue - test.startTime.doubleValue)];
//##############################################
//Some other success stuff...
};
실패 :
void (^failureWrapper) (AFHTTPRequestOperation *, NSError *) = ^(AFHTTPRequestOperation *operation, NSError *error) {
//#################TEST ANALYTICS###############
NSDate *endTime = [NSDate date];
test.endTime = [NSNumber numberWithDouble:[endTime timeIntervalSince1970]];
test.lat = [NSNumber numberWithDouble:(test.endTime.doubleValue - test.startTime.doubleValue)];
//##############################################
//Some other failure stuff...
};
그러나 로그 파일에서 대기 시간이 매우 길어지고 X
이 점점 더 커지고있어 악화되고 있습니다.
스레드 사이의 컨텍스트 전환으로 인해 문제가 발생한다고 생각하지만 확실치 않습니다. 그래서 내 질문은 : 많은 스레드가있는 시스템에서 AFNetworking
에있는 각 호출의 응답 시간을 올바르게 측정하려면 어떻게해야합니까?
일부 노트 : 위에서 언급 한 바와 같이 다른 순차적으로 일어날 수있는 반면
이- , 통화 중 일부는 동시에 발생할 수 있습니다.
X
은 결국 매우 높아야합니다 (> 10000).
감사합니다.
10,000 스레드에서는 상당한 오버 헤드가 발생하므로 테스트 응용 프로그램을 한 줌으로 제한하는 것이 좋습니다. –
@SamMiller, 글쎄요. 100 개의 스레드 (그리고 그보다 적은 수)에 대해 높은 수치를 보였습니다. 약 10000을 말하는 것이 아닙니다. – goldengil
@ goldjinil, 100 개가 아닌 20 개의 스레드를 사용해야합니다. –