언어/기타

이벤트 처리에서의 속도

by Yggdrasil posted Jul 27, 2006
?

단축키

Prev이전 문서

Next다음 문서

ESC닫기

크게 작게 위로 아래로 댓글로 가기 인쇄
이벤트의 반복 방법에는 대략 세가지 정도가 있습니다. 자동적으로 시작, 정기적 병렬 처리, 되풀이 처리.


그렇다면 어느 것이 더 빠를지 간단한 실험을 해보았습니다.

각각의 이벤트는 각각의 변수에 1을 가산하도록 되어있습니다. 그리고 3초씩 처리한 후에 중지됩니다.



실험 결과

자동적으로 시작 : 180
정기적 병렬 처리 : 181
되풀이 처리 : 360252



여기서 저희는 자동적으로 시작과 정기적으로 병렬 처리에는 근소한 차이로 정기적 병렬 처리가 빠르다고 할 수 있겠습니다. 그리고 되풀이 처리는 월등히, 약 2000배 빠르다고 할 수 있습니다. 그런데! 여기에 또다른 변수가 있으니. 그건 바로 대기 '0'초 입니다.

예전에 흔히들 렉을 없애기 위해 대기 0초를 넣으라고 하는 사람들이 있었습니다(지금은 모르겠습니다). 대기 0초. 말 그대로 '0초를 기다리라'니까 결국 아무것도 없는 것과 같은 것 아닌가? 하지만 명령을 읽는 시간이 걸리기 때문에 대기 0초도 상당히 많이 변화를 줍니다. 그렇다면 변수를 1 가산한 후 0초를 기다리게 하면 어떤 결과가 나올까요? 실험해보았습니다.



실험결과
자동적으로 시작 : 179
정기적 병렬 처리 : 91
되풀이 처리 : 216



여기서 새로운 결과가 나오게 됩니다. 자동적으로 시작은 거의 대기 0초의 효과를 받지 않습니다. 반면에, 정기적 병렬 처리는 약 2배정도 속도가 느려졌습니다. 또한, 비록 역시 제일 빠르기는 하나, 되풀이 처리는 현저히 느려졌습니다. 약 1600배 정도 떨어져서 이제 자동적으로 시작의 2배에도 못미치지요. 마지막으로 한가지를 실험해보겠습니다. 대기 0초를 10번 넣어봤습니다.



실험결과
자동적으로 시작 : 18
정기적 병렬 처리 : 17
되풀이 처리 : 36



역시 비슷한 결과가 나왔습니다. 뭐, 되풀이 처리는 이벤트 개수에 상당히 많이 영향을 받는 것으로 보입니다만, 실상은 대기 0초에서만 상당히 느려지는 것 같았습니다.



결론 : 이벤트 처리의 속도

되풀이 처리 > 정기적 병렬 처리 ≒ 자동적으로 시작
즉 반복 이벤트를 짤 때는 되풀이 처리를 꼭 쓰자



그리고, 실험을 할 때마다 수치는 약간씩 변화합니다. 또한 어쩌면 컴퓨터 성능에 따라 수치가 달라질지도 모르는 일입니다(매우 불확실).