웹마스터 팁
page_full_width" class="col-xs-12" |cond="$__Context->page_full_width">
<와 <=의 속도차이?
2004.07.07 18:30
루프문으로 애용되는 for문에서
for($i = 0; $i < 100; $i++) 와
for($i = 1; $i <= 100; $i++) 중 어느것이 빠를까하는 생각이 들더군요.
간단하게 100만번 공루프를 돌려서
로프를 돌기전 시간과 루프를 돈후의 시간을
마이크로타임함수로 재서 빼는 방식으로 걸린시간을 측정
for($i = 0; $i < 1000000; $i++); 일때
0.869253
0.900749
0.877617
0.8832
1.037468
0.954882
0.989906
0.875942
0.904881
0.92093
0.867993
0.940773
for($i = 1; $i <= 1000000; $i++); 일때
0.998003
1.204098
0.926894
0.95996
0.927289
1.152388
0.945146
0.913273
0.925962
0.931893
0.934385
1.013186
큰 차이는 없지만 <=보다 <쪽이 아주약간 빠른것 같다는 느낌이 듭니다.
그래서 루프를 올려서 1000만번 루프
(서버에 무리를 줄듯해서 횟수는 4번씩..)
for($i = 0; $i < 10000000; $i++); 일때
9.516256
11.262555
9.00474
9.253498
for($i = 1; $i <= 10000000; $i++); 일때
11.437906
11.623652
13.596819
10.597946
확실히 루프가 올라가니 뚜렸한 차이를 보입니다.
그러나 1000만번이라는 횟수를 감안하는 그 차이는
미미할것입니다.
결론은 <=보다 <가빠르다.
그러나 차이는 미미하다.. [;]
전 참고로 전통적으로(?) <를 사용해온..
for($i = 0; $i < 100; $i++) 와
for($i = 1; $i <= 100; $i++) 중 어느것이 빠를까하는 생각이 들더군요.
간단하게 100만번 공루프를 돌려서
로프를 돌기전 시간과 루프를 돈후의 시간을
마이크로타임함수로 재서 빼는 방식으로 걸린시간을 측정
for($i = 0; $i < 1000000; $i++); 일때
0.869253
0.900749
0.877617
0.8832
1.037468
0.954882
0.989906
0.875942
0.904881
0.92093
0.867993
0.940773
for($i = 1; $i <= 1000000; $i++); 일때
0.998003
1.204098
0.926894
0.95996
0.927289
1.152388
0.945146
0.913273
0.925962
0.931893
0.934385
1.013186
큰 차이는 없지만 <=보다 <쪽이 아주약간 빠른것 같다는 느낌이 듭니다.
그래서 루프를 올려서 1000만번 루프
(서버에 무리를 줄듯해서 횟수는 4번씩..)
for($i = 0; $i < 10000000; $i++); 일때
9.516256
11.262555
9.00474
9.253498
for($i = 1; $i <= 10000000; $i++); 일때
11.437906
11.623652
13.596819
10.597946
확실히 루프가 올라가니 뚜렸한 차이를 보입니다.
그러나 1000만번이라는 횟수를 감안하는 그 차이는
미미할것입니다.
결론은 <=보다 <가빠르다.
그러나 차이는 미미하다.. [;]
전 참고로 전통적으로(?) <를 사용해온..
댓글 23
-
EioF
2005.10.18 14:21
강제이행소스때문에 느려진다는.... -
EioF
2005.10.18 14:20
프로그래밍을 하다보면 <= 를 써야 할경우가 있습니다.
<= 를 써야할경우에 강제적으로 < 를 쓰게끔 소스를 코딩 하게되면 더 비효율 적이고
오히려 < 보다 느려질수도 있게됩니다... -
ⓜASE™
2004.07.08 11:59
헌데 정확한 수식 계산을 하는데서는 혼용하면 안되죠 =_=a.
두개를 혼용해서 잘못하다가는 프로그램이 이상한 결과값을 낼지도 모르죠 -
플로렐라
2004.07.08 18:16
holies // 두개가 차이가 날수 밖에 없잖습니까?
_kioria // 위의 방법으로도 별상관은 없다고 생각합니다.
ⓜASE™ // 두방식으로 정확하게 사용하면 이상한 결과가 나올리가 전혀 없습니다. -
☺심심
2004.07.07 19:52
이.. 이상한 실험을..; -
holies
2004.07.07 19:28
깊이 공부하시면 아시겠지만 두 명령의 수행 속도가 차이가 나면 안 되겠지요. -
_kioria
2004.07.07 20:03
for (i = 0; i <= 10000000; $i++) { statements }
for (i = 0; i < 10000001; $i++) { statements } 가 아닐까 쉽군요.
counting 프로세스를 정확하고 똑같이 해줘야... -
ⓜASE™
2004.07.08 20:07
글쎄요 =_=a.
정수값만 취급하는 프로그램이면 모르겠지만, 소수까지 취급하는 세밀한 프로그램중
속도를 중요시한다고 잘못 쓰면 값이 왕창 잘못 나오죠 =_=;; -
플로렐라
2004.07.08 20:23
ⓜASE™// <로 구현할수 있는건 <=로도 구현가능한데 무엇에서 잘못이 생긴다는거죠?
완전히 똑같이 사용할수 있는데 잘못이 생길리가 있을까요? -
플로렐라
2004.07.08 20:43
ⓜASE™ // 제가 말하는건 루프문의 경우.
수의 대소를 정밀하게 비교하는게 아닐때.
(이 글의 목적이 루프문에서의 사용이니..;) -
TheMics
2004.07.08 22:05
루프문에 정수만 넣으란 법은 없잖아요...
for($i = 0;$i < 5;$i = $i + 0.3781); -
TheMics
2004.07.09 20:34
저는 그냥 "완전히 똑같이 사용할"수 없다는걸 말하려고 쓴거에요; -
Root
2004.07.09 22:33
믹스님은 실수를 사용할 수도 있다는걸 보여준 것 뿐인데 chadr님은 해석이 지나치시군요 -_- -
nreal
2004.07.10 10:08
아무튼 둘중에 어느것이 빠르던간에 적당한것을 사용하는것이 좋지요..
<사용하면 될것가지고 $x-1 해가지고 <=사용할것 같으면 저라면 < 하나로 끝낼것 같습니다;; -
chadr
2004.07.10 11:39
TheMics, Root// 아. 그렇군요. 죄송합니다. 직업상 저런거에는 신경이 날카로워져서 다소 공격적이 되었군요.. -
TheMics
2004.07.10 12:53
죄송할 게 어디있어요;별로 공격적인 반응도 아니었는데요...
저야말로 밑도 끝도 없이 예문만 넣은게 잘못이지요... -
앳플군
2004.07.10 15:30
for (i = 0; i <= 10000000; $i++) 이 당연히 for (i = 0; i < 10000000; $i++) 보다 느립니다.
전자의 경우에는 9999999번 반복하고 $i가 1 늘어나고 (10000000) 명령 실행하고 $i가 10000001이 된 것을 체크하고 끝나고,
후자의 경우에는 9999999번 반복되고 $i가 1 늘어나고 (10000000) $i가 10000000보다 작지 않기 때문에 끝나고..
즉, 전자의 경우가 명령을 한 번 더 실행합니다.
.. 까지가 _kioria님이 말하신 의도인 듯 합니다 ;D -
chadr
2004.07.09 19:00
TheMics// 반복문에 카운터 변수로 실수를 넣는 코딩을 하는 사람이 얼마나 있을까요?
만약에 있따면 그건 설계부터의 잘못인것 같군요.
저런식의 코딩은 뻔히 눈에 보이는 버그의 위험성을 간과하고 일부러 버그를 내는 것이라고밖에
볼수가 없네요...
<와 <=의 속도차이라..
엄밀하게 말하면 날수도 있고.. 안날수도 있겠군요.
실제 php 파서가 해당 시피유에 최적화된 기계어 코드를 만들때
그 시피유의 여러가지 변수(파이프라인, 캐시, 고속처리를 위한 전용 명령어)와 같은것에
영향을 미칠것이라고 봅니다.
하지만 이 차이는 매우 미세할것으로 생각되네요..
만약에 <와 <=연산자에 최적화된 기계어 코드가 제공되는 시피유라해도
그렇지 않은 시피유와는 별 차이가 안날것으로 생각됩니다.
전자는 작다, 후자는 작거나 같다 라고 하는 조건의 두번 검사 과정이 필요할텐데
이는 길어야지 5클럭 이내로 처리될듯 싶습니다.
실제로는 명령어캐시나, 파이프라인등(요즘 시피유는 이런거는 기본 지원이지요?)의
영향으로 차이가 거의 안나거나 매우 미세하여 무시 할 정도라고 생각됩니다.
오히려 이런거보다는 다른 시간이 오래걸리는 알고리즘을 최적화하는것이 더 효율적이라고
생각되는군요.
실제 php파서가 어떤 어셈코드를 만들어내는지 확인할 방법이 없으므로..
직접 C언어로 작성하여 컴파일시 어셈코드도 같이 출력되게 해서 확인해보도록 해야겠군요. -
Mastojun
2004.07.11 08:32
앳플군님//
for ($i = 0; $i <= 10000000; $i++) 이 당연히 for ($i = 0; $i < 10000000; $i++)
이 아니라
for ($i = 1; $i <= 10000000; $i++) 이 당연히 for ($i = 0; $i < 10000000; $i++)
이였습니다아~;; -
플로렐라
2004.07.12 17:11
왠지 분위기가 이상해졌는데,
제가 말하고자 한건 <와 <=의 단순한 속도차이에 대해 이야기한겁니다;
기계어로 번역되면 <=쪽이 코드가 더 길어지겠죠.
한번의 처리를 더 포함하고있으니, 그렇기 때문에 느려질것이다. 라는건데..
아무튼 결론은 차이는 미미하다...이니 논쟁은 이만하시는게;; -
☆~
2004.07.13 17:35
' < '는 비교기의 값이 작냐 작지 않느냐 만 따지면 되지만 ' <= '는 작고 같냐 이렇게 두가지를 알아봐야 하기 떼문이 아닐까요? =_=a
그레도 그리 신경쓸일은 아니겠죠 ^^;
( 제생각은 기계어로 나오는 소스 길이는 같을듯 하네요
( 단지 cpu에서 처리할떼 비교기에서 나온 값의 3가지 경우에서 한가지만을 알아보느냐 두가지를 알아보느냐
( 에서 저런 차이가 나는듯 하군요 -
토끼군
2004.07.14 21:03
명령어 하나 더 들어 가는 거 맞을 것 같네요. a<b와 동치(적어도 a,b가 실수라면)가 not a>b니까.... -
앳플군
2004.07.14 21:43
정정합니다.
잘못봤습니다아~;;
[..]
제목 | 글쓴이 | 날짜 |
---|---|---|
rand함수와 mt_rand함수의 비교 [6] | 심심타 | 2004.07.30 |
트랙백 구현하기 - 4. PHP로 트랙백 핑 받기 | TheMics | 2004.07.18 |
트랙백 구현하기 - 3. PHP로 트랙백 핑 보내기 [4] | TheMics | 2004.07.18 |
히어닥 문법 활용 [14] | ☺심심 | 2004.07.13 |
++와 +=1 의 속도차이 [7] | 플로렐라 | 2004.07.12 |
<와 <=의 속도차이? [23] | 플로렐라 | 2004.07.07 |
서버가 느려졌을경우... [20] | 신상우 | 2004.06.28 |
파일업로드시 파일명 중복되지 않게 저장하기.. [8] | 페리 | 2004.06.28 |
페이지에 암호를 걸자..=_= [27] | ☺심심 | 2004.06.25 |
아이피 접근을 막고 메세지 출력하기.. [11] | ☺심심 | 2004.06.24 |
오늘의 명언을 출력해주는 함수 [10] | 김재경 | 2004.06.15 |
3. if문 [13] | 티다 | 2004.06.05 |
응용편 - BMI 측정 테스트 소스를 만들어보자 [5] | 티다 | 2004.06.04 |
게시판내용에 코멘트를 달자!! -마지막- [2] | 이혁 | 2004.06.03 |
게시판내용에 코멘트를 달자!! -2- [1] | 헉스 | 2004.06.02 |
게시판내용에 코멘트를 달자!! [3] | 헉스 | 2004.06.02 |
2. array [5] | 티다 | 2004.06.02 |
1. 연산자 [2] | 티다 | 2004.06.02 |
주식정보출력코드 [2] | 김재경 | 2004.06.01 |
윈도우계정에서 현재 남은 용량과 DB 용량 알기 [6] | 지으니 | 2004.05.31 |