일반 앱의 경우이 작업을 수행하고 싶지 않을 것입니다.iPhone에서 CPU 사용량이 많은 작업을 수행하도록 시뮬레이션 하시겠습니까?
하지만 ... 다른 아이폰 하드웨어 및 OS 레벨에서 다른 스레딩 모델이 어떻게되는지 사람들에게 정확하게 보여줄 교육용 앱을 만들고 있습니다. OS 4는 여러 모델을 근본적으로 바꿔 놓았습니다 (IME : OS 4에서 실행할 때 기존 코드가 많이 작동하지 않습니다).
다른 모델 (선택기 메인 스레드, 셀렉터 백그라운드, nsoperationue 등)에 대한 스레드를 실행할 수있는 대화식 테스트 응용 프로그램을 작성하고 GUI + 메인 응용 프로그램에 어떤 일이 일어나는지 볼 수 있습니다.
그러나 재현하고자하는 일반적인 사용 사례 중 하나는 "백 그라운드 다운로드를 수행 한 스레드가 CPU 집약적 인 결과 구문 분석을 수행합니다"입니다. 우리는 실제 애플 리케이션에서 이것을 많이 봅니다.
완전히 사소한 것은 아닙니다. "바쁘다"는 방식이 중요합니다.
그래서 ... 어떻게 시뮬레이션 할 수 있습니까? 최적화 된 컴파일러 (지금 또는 더 나은 컴파일러)가 던져 버릴 수없는 것을 찾고 있으며 스레드가 최대 CPU에서 약 5 초 동안 실행되도록 할 수 있습니다.
NB : 내 실제 애플 리케이션에서, 나는 아이폰 스레드가 바쁠 때 일어나는 이상한 일들이 있음을 발견했다. 백그라운드 쓰레드는 낮은 우선 순위로 설정할 때 메인 쓰레드가 굶어 죽을 것이다. 이것은 분명히 애플의 스레드 스케줄러의 버그이지만, 이것을 보여주는 바쁜 일을하고 싶습니다. 그리고/또는 스케줄러에서 그 행동을 유발하지 않을 때 일어나는 일을 보여주는 바쁜 일도 할 수 있습니다.
UPDATE :
예를 들어, 다음이 가질 수있는 다양한 효과 :
는for(int i=0; i<1000; i++)
for(int k=0; k<1000; k++)
CC_MD5(cStr, strlen(cStr), result);
for(int i=0; i<1000000; i++)
CC_MD5(cStr, strlen(cStr), result);
... 때로는, 적어도, 컴파일러는 후자를 최적화하는 것 (그리고 난 아무 생각이 무엇이 없다 컴파일러 부두는입니다 - 일부는 더 차이가 없었다 빌드가
UPDATE 2) :(했던 일부하십시오 만 달러를하고 첫번째 세대 아이폰에
25 스레드, n MD5는 각각 ... GUI에 거의 영향을 미치지 않습니다.
번들 된 SAX 기반 파서를 사용하여 XML을 구문 분석하는 5 개의 스레드는 일반적으로 GUI를 중단시킵니다.
MD5 해시는 아이폰의 버그 스레드 스케줄러 :(에서 문제를 유발하지 않는 것으로 보인다는. 나는 다른 효과가 있는지, 대신 MEM 할당을 조사하는거야.
이
방금 말했듯이, "백도 랭 (backgorund) 다운로드를 수행 한 스레드가 CPU 집약적 인 결과 구문 분석"을 시뮬레이션하려고합니다. 왜 그렇게하지 않는거야? 즉 일련의 임의 파일을 다운로드하고 처리 루틴 (md5와 같은)을 적용하지만 100 개의 스레드처럼 사용합니다. – 5ound
@ 5ound 이것은 대답이어야합니다. 만약 당신이 내 +1을 얻을 것이다. 누구도 일을하지 않고 코드를 스스로 구축해야합니다. 당신의 아이디어로 답을 얻을 수 있습니다. – Jann
Jann - 작동하지 않습니다 (나는 그렇게 간단하지 않다고 생각합니다). 이것의 이론은 사소한 것이지만, 연습은 저를 곤란하게합니다. – Adam