웹개발 - PHP 프로그램 개발 강의
글수 707
루프문으로 애용되는 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만번이라는 횟수를 감안하는 그 차이는
미미할것입니다.
결론은 <=보다 <가빠르다.
그러나 차이는 미미하다.. [;]
전 참고로 전통적으로(?) <를 사용해온..
2005.10.18 14:20:42 (*.106.132.118)
프로그래밍을 하다보면 <= 를 써야 할경우가 있습니다.
<= 를 써야할경우에 강제적으로 < 를 쓰게끔 소스를 코딩 하게되면 더 비효율 적이고
오히려 < 보다 느려질수도 있게됩니다...
<= 를 써야할경우에 강제적으로 < 를 쓰게끔 소스를 코딩 하게되면 더 비효율 적이고
오히려 < 보다 느려질수도 있게됩니다...
2004.07.08 11:59:24 (*.172.215.16)
헌데 정확한 수식 계산을 하는데서는 혼용하면 안되죠 =_=a.
두개를 혼용해서 잘못하다가는 프로그램이 이상한 결과값을 낼지도 모르죠
두개를 혼용해서 잘못하다가는 프로그램이 이상한 결과값을 낼지도 모르죠
2004.07.08 18:16:42 (*.96.50.101)
holies // 두개가 차이가 날수 밖에 없잖습니까?
_kioria // 위의 방법으로도 별상관은 없다고 생각합니다.
ⓜASE™ // 두방식으로 정확하게 사용하면 이상한 결과가 나올리가 전혀 없습니다.
_kioria // 위의 방법으로도 별상관은 없다고 생각합니다.
ⓜASE™ // 두방식으로 정확하게 사용하면 이상한 결과가 나올리가 전혀 없습니다.
2004.07.07 20:03:41 (*.31.24.85)
for (i = 0; i <= 10000000; $i++) { statements }
for (i = 0; i < 10000001; $i++) { statements } 가 아닐까 쉽군요.
counting 프로세스를 정확하고 똑같이 해줘야...
for (i = 0; i < 10000001; $i++) { statements } 가 아닐까 쉽군요.
counting 프로세스를 정확하고 똑같이 해줘야...
2004.07.08 20:07:04 (*.172.215.16)
글쎄요 =_=a.
정수값만 취급하는 프로그램이면 모르겠지만, 소수까지 취급하는 세밀한 프로그램중
속도를 중요시한다고 잘못 쓰면 값이 왕창 잘못 나오죠 =_=;;
정수값만 취급하는 프로그램이면 모르겠지만, 소수까지 취급하는 세밀한 프로그램중
속도를 중요시한다고 잘못 쓰면 값이 왕창 잘못 나오죠 =_=;;
2004.07.08 20:23:02 (*.96.50.101)
ⓜASE™// <로 구현할수 있는건 <=로도 구현가능한데 무엇에서 잘못이 생긴다는거죠?
완전히 똑같이 사용할수 있는데 잘못이 생길리가 있을까요?
완전히 똑같이 사용할수 있는데 잘못이 생길리가 있을까요?
2004.07.08 20:43:25 (*.96.50.101)
ⓜASE™ // 제가 말하는건 루프문의 경우.
수의 대소를 정밀하게 비교하는게 아닐때.
(이 글의 목적이 루프문에서의 사용이니..;)
수의 대소를 정밀하게 비교하는게 아닐때.
(이 글의 목적이 루프문에서의 사용이니..;)
2004.07.10 10:08:37 (*.164.28.116)
아무튼 둘중에 어느것이 빠르던간에 적당한것을 사용하는것이 좋지요..
<사용하면 될것가지고 $x-1 해가지고 <=사용할것 같으면 저라면 < 하나로 끝낼것 같습니다;;
<사용하면 될것가지고 $x-1 해가지고 <=사용할것 같으면 저라면 < 하나로 끝낼것 같습니다;;
2004.07.10 11:39:31 (*.221.170.200)
TheMics, Root// 아. 그렇군요. 죄송합니다. 직업상 저런거에는 신경이 날카로워져서 다소 공격적이 되었군요..
2004.07.10 15:30:30 (*.102.72.88)
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
전자의 경우에는 9999999번 반복하고 $i가 1 늘어나고 (10000000) 명령 실행하고 $i가 10000001이 된 것을 체크하고 끝나고,
후자의 경우에는 9999999번 반복되고 $i가 1 늘어나고 (10000000) $i가 10000000보다 작지 않기 때문에 끝나고..
즉, 전자의 경우가 명령을 한 번 더 실행합니다.
.. 까지가 _kioria님이 말하신 의도인 듯 합니다 ;D
2004.07.09 19:00:35 (*.221.170.200)
TheMics// 반복문에 카운터 변수로 실수를 넣는 코딩을 하는 사람이 얼마나 있을까요?
만약에 있따면 그건 설계부터의 잘못인것 같군요.
저런식의 코딩은 뻔히 눈에 보이는 버그의 위험성을 간과하고 일부러 버그를 내는 것이라고밖에
볼수가 없네요...
<와 <=의 속도차이라..
엄밀하게 말하면 날수도 있고.. 안날수도 있겠군요.
실제 php 파서가 해당 시피유에 최적화된 기계어 코드를 만들때
그 시피유의 여러가지 변수(파이프라인, 캐시, 고속처리를 위한 전용 명령어)와 같은것에
영향을 미칠것이라고 봅니다.
하지만 이 차이는 매우 미세할것으로 생각되네요..
만약에 <와 <=연산자에 최적화된 기계어 코드가 제공되는 시피유라해도
그렇지 않은 시피유와는 별 차이가 안날것으로 생각됩니다.
전자는 작다, 후자는 작거나 같다 라고 하는 조건의 두번 검사 과정이 필요할텐데
이는 길어야지 5클럭 이내로 처리될듯 싶습니다.
실제로는 명령어캐시나, 파이프라인등(요즘 시피유는 이런거는 기본 지원이지요?)의
영향으로 차이가 거의 안나거나 매우 미세하여 무시 할 정도라고 생각됩니다.
오히려 이런거보다는 다른 시간이 오래걸리는 알고리즘을 최적화하는것이 더 효율적이라고
생각되는군요.
실제 php파서가 어떤 어셈코드를 만들어내는지 확인할 방법이 없으므로..
직접 C언어로 작성하여 컴파일시 어셈코드도 같이 출력되게 해서 확인해보도록 해야겠군요.
만약에 있따면 그건 설계부터의 잘못인것 같군요.
저런식의 코딩은 뻔히 눈에 보이는 버그의 위험성을 간과하고 일부러 버그를 내는 것이라고밖에
볼수가 없네요...
<와 <=의 속도차이라..
엄밀하게 말하면 날수도 있고.. 안날수도 있겠군요.
실제 php 파서가 해당 시피유에 최적화된 기계어 코드를 만들때
그 시피유의 여러가지 변수(파이프라인, 캐시, 고속처리를 위한 전용 명령어)와 같은것에
영향을 미칠것이라고 봅니다.
하지만 이 차이는 매우 미세할것으로 생각되네요..
만약에 <와 <=연산자에 최적화된 기계어 코드가 제공되는 시피유라해도
그렇지 않은 시피유와는 별 차이가 안날것으로 생각됩니다.
전자는 작다, 후자는 작거나 같다 라고 하는 조건의 두번 검사 과정이 필요할텐데
이는 길어야지 5클럭 이내로 처리될듯 싶습니다.
실제로는 명령어캐시나, 파이프라인등(요즘 시피유는 이런거는 기본 지원이지요?)의
영향으로 차이가 거의 안나거나 매우 미세하여 무시 할 정도라고 생각됩니다.
오히려 이런거보다는 다른 시간이 오래걸리는 알고리즘을 최적화하는것이 더 효율적이라고
생각되는군요.
실제 php파서가 어떤 어셈코드를 만들어내는지 확인할 방법이 없으므로..
직접 C언어로 작성하여 컴파일시 어셈코드도 같이 출력되게 해서 확인해보도록 해야겠군요.
2004.07.11 08:32:43 (*.160.222.90)
앳플군님//
for ($i = 0; $i <= 10000000; $i++) 이 당연히 for ($i = 0; $i < 10000000; $i++)
이 아니라
for ($i = 1; $i <= 10000000; $i++) 이 당연히 for ($i = 0; $i < 10000000; $i++)
이였습니다아~;;
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:59 (*.96.50.101)
왠지 분위기가 이상해졌는데,
제가 말하고자 한건 <와 <=의 단순한 속도차이에 대해 이야기한겁니다;
기계어로 번역되면 <=쪽이 코드가 더 길어지겠죠.
한번의 처리를 더 포함하고있으니, 그렇기 때문에 느려질것이다. 라는건데..
아무튼 결론은 차이는 미미하다...이니 논쟁은 이만하시는게;;
제가 말하고자 한건 <와 <=의 단순한 속도차이에 대해 이야기한겁니다;
기계어로 번역되면 <=쪽이 코드가 더 길어지겠죠.
한번의 처리를 더 포함하고있으니, 그렇기 때문에 느려질것이다. 라는건데..
아무튼 결론은 차이는 미미하다...이니 논쟁은 이만하시는게;;


