안드로이드 개발 질문/답변
(글 수 45,052)
안녕하세요 초보 개발자 입니다.
int i = 0;
long start = System.currentTimeMillis();
while (i < 100) {
Log.d("TEST", "time = " + System.currentTimeMillis());
i++;
}
long end = System.currentTimeMillis();
long elapsed = end - start;
text.setText("start time = " + start + "\nend time = " + end
+ "\nelapsed time = " + elapsed);
위 테스트는 루프 수행시간 계산하는 테스트인데요.
측정 결과가 너무 불규칙해서 문의 드립니다.
일단 결과 값은
5ms ~ 100ms 까지 가지 각색으로 수행시간 차이가 있는데요.
일단 단말기는 디자이어 입니다.
1Ghz CPU 를 사용했음에도 불구하고 위와 같은 펑션 수행 속도 차이가 나는 이유는 무엇일까요?
물론 실시간 daemon process 를 감안 한다고 해도 너무 심각한 수준인거 같습니다.
ns 연산을 수행하는 app 도 꽤 있을거 같은데..........
멀티 쓰레딩에서 context swithing 은 10ms 이상 시간이 필요 하다고 본거 같기도 한데
실제 안드로이드에서는 어떤지 알 수 있나요?
수행시간을 일정하게 하는 무슨 방법이 없을까요?
프로세스 priorit 을 증가 시키든가 하는 ...
즐거운 하루 되세요.
int i = 0;
long start = System.currentTimeMillis();
while (i < 100) {
Log.d("TEST", "time = " + System.currentTimeMillis());
i++;
}
long end = System.currentTimeMillis();
long elapsed = end - start;
text.setText("start time = " + start + "\nend time = " + end
+ "\nelapsed time = " + elapsed);
위 테스트는 루프 수행시간 계산하는 테스트인데요.
측정 결과가 너무 불규칙해서 문의 드립니다.
일단 결과 값은
5ms ~ 100ms 까지 가지 각색으로 수행시간 차이가 있는데요.
일단 단말기는 디자이어 입니다.
1Ghz CPU 를 사용했음에도 불구하고 위와 같은 펑션 수행 속도 차이가 나는 이유는 무엇일까요?
물론 실시간 daemon process 를 감안 한다고 해도 너무 심각한 수준인거 같습니다.
ns 연산을 수행하는 app 도 꽤 있을거 같은데..........
멀티 쓰레딩에서 context swithing 은 10ms 이상 시간이 필요 하다고 본거 같기도 한데
실제 안드로이드에서는 어떤지 알 수 있나요?
수행시간을 일정하게 하는 무슨 방법이 없을까요?
프로세스 priorit 을 증가 시키든가 하는 ...
즐거운 하루 되세요.
2010.07.20 21:23:03
안드로이드는 아니지만 서버쪽 자바개발시의 경험에 비추어보면요.
System.currentTimeMillis() 는 해상도가 OS 에 많이 좌우됩니다.
nanosec 을 구하는 것도 같은 문제가 있고요.
보동 윈도우계열이 리눅스계열보다 안좋은데 리눅스도 문제가 없는 것은 아니니까 이것에 관련된 자료를 먼저 찾아보시는게 좋겠네요.
2010.07.20 23:59:15
님이 사용하신 펑션은 정확한 시간을 계산할 수 없는 프로그램입니다. 여담으로 펌웨어로 리얼타임의 직관적인 처리를 하는 곳이라면.. 클럭당 하나의 op 코드를 수행하여 클럭에 비례한 시간이 맞지만 그것도 오랜 시간동안 틀어 놓으면 시간이 엉망이 되지요.. 위에 올린 님 소스는 OS상에서 님 소스만 구동되는것이 아니라 여러 프로세스가 동시에 움직이고 있기 때문에 실시간 다중처리를 하여야 하고 중요한 interrupt 상황이 발생되면 우선순위에 따라 interrupt먼저 처리 하여 평균 시간이 일정하지 않는겁니다 . 그래서 시간을 정확하게 얻고자 할때면 Timer (watchdog timer)를 사용합니다. 수행처리sync를 마추고 싶다면 handler 를 사용하여 msg queue 에 넣었다 뺏다 하셔야 할거 같기도 하고.. process sync라면 service 에서 ipc통신으로 어찌고 저찌고`~~~ 모르것네요 ㅎㅎ