원본에서 더 깔끔합니다.
[알고리즘]
비교 알고리즘: 피보나치 수열
반복횟수: 5회
피보나치 값: 38
[C++] (MSVC, 최적화 안함)
#include <iostream>
#include "HourMeter.h"
using namespace std;
int fibonacci(const int value) {
if (value == 0 || value == 1) {
return 1;
}
return fibonacci(value - 1) + fibonacci(value - 2);
};
void main() {
HourMeter hm;
int fibValue{ 38 };
for(int i=0;i<5;i++){
printf("fibValue: %d\n", fibValue);
hm.startMeasure();
int result = fibonacci(fibValue);
hm.endMeasure();
printf("value: %d\n", result);
}
}
[Node.js]
function fibonacci(value){
if(value === 0 || value === 1){
return 1;
}
return fibonacci(value - 1) + fibonacci(value - 2);
}
let result;
let fibValue = 38;
for(let i=0;i<5;i++){
console.time('alice');
result = fibonacci(fibValue);
console.timeEnd('alice');
console.log(result);
}
[LuaJIT]
function fiboniacci(value)
if (value == 0 or value == 1) then
return 1
end
return fiboniacci(value - 1) + fiboniacci(value - 2)
end
fibValue = 38
for i=1,5 do
start_time = os.clock()
result = fiboniacci(fibValue)
end_time = os.clock()
elapsed_time = end_time - start_time
print("elapsed_time: " .. elapsed_time .. "sec");
print("result: " .. result)
end
[Golang]
package main
import (
"time"
)
func fibonacci(value int) int {
if value == 0 || value == 1 {
return 1
}
return fibonacci(value-1) + fibonacci(value-2)
}
func main() {
fibValue := 38
for i:=0;i<5;i++ {
startTime := time.Now()
result := fibonacci(fibValue)
elapsedTime := time.Since(startTime)
d2 := elapsedTime / time.Millisecond
println("time: ", d2, ", result: ", result)
}
}
[웹 브라우저] (파이어폭스, 크롬, 엣지)
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Go wasm</title>
<script>
function fibonacci(value){
if(value === 0 || value === 1){
return 1;
}
return fibonacci(value - 1) + fibonacci(value - 2);
}
let result;
let fibValue = 38;
for(let i=0;i<5;i++){
console.time('alice');
result = fibonacci(fibValue);
console.timeEnd('alice');
console.log(result);
}
</script>
</head>
<body>
</body>
</html>
[Rust]
//rustc ./main.rs
use std::time::{Instant};
fn fib(value: i32) -> i32 {
if value == 0 || value == 1 {
return 1;
}
return fib(value - 1) + fib(value - 2);
}
fn main() {
let fib_value= 38;
for _n in 1..5 {
println!("start. fib_value {}", fib_value);
let start_time = Instant::now();
let a: i32 = fib(fib_value);
let end_time = Instant::now();
let elapsed_time = end_time.duration_since(start_time);
println!("{:?}", elapsed_time);
println!("{}", a);
}
}
[C#]
using System;
using System.Text;
using System.Diagnostics;
class MainClass {
static long fibonacci(long value){
if(value == 0 || value == 1){
return 1;
}
return fibonacci(value - 1) + fibonacci(value - 2);
}
public static void Main (string[] args) {
int fibValue = 38;
Console.WriteLine("fibValue: " + fibValue);
for(int i = 0; i < 5; i++)
{
Stopwatch sw = new Stopwatch();
sw.Start();
long result = fibonacci(fibValue);
sw.Stop();
Console.WriteLine("result: " + result);
Console.WriteLine("time:" + sw.ElapsedMilliseconds.ToString() + "ms");
}
}
}
[Java]
class Main {
static long fibonacci(long value){
if(value == 0 || value == 1){
return 1;
}
return fibonacci(value - 1) + fibonacci(value - 2);
}
public static void main(String[] args) {
long fibValue = 38;
System.out.println("fibValue: " + fibValue);
for(int i=0;i<5;i++){
long startTime = System.currentTimeMillis();
long result = fibonacci(fibValue);
long endTime = System.currentTimeMillis();
System.out.println("result: " + result);
System.out.println("elapsed time:" + (endTime - startTime) + "ms");
}
}
}
[Python]
import time
def fibonacci(value):
if value == 0 or value == 1:
return 1
return fibonacci(value - 1) + fibonacci(value - 2)
fibValue = 38
for i in range(0, 5):
print('start fibonacci')
start = time.time()
result = fibonacci(fibValue)
end = time.time()
print('result(', i, '): ', result)
print('elapsed time: ', end - start, 's')
[테스트 환경]
*운영체제: 윈도우 10 pro 64비트
→ 빌드 버전: 1903
*CPU: AMD Ryzen 1700 8-Core Processor
*RAM: 32.0GB
[테스트 결과]
*C++: 0.290초 (최적화 사용시 0초)
*Golang: 0.296초
*Node.js: 0.483초
*Python: 15.744초
*C#: 0.307초
*Java (v1.8.0_251): 0.248초
*Rust: 0.580초
*LuaJIT: 0.535초
*파이어폭스: 0.365초
*크롬: 0.521초
*엣지: 0.525초
[속도 순서 정렬]
*C++ (최적화 사용시 0초) >>>> Java > Golang > C# >파이어폭스> Node.js > 크롬 > 엣지 > LuaJIT > Rust >>>>> Python
[주의사항]
*본 테스트는 오로지 피보나치 수열에서의 성능만 측정하였으므로, 이로 인해 언어의 성능을 판단하기 부족합니다.
'컴퓨터 공학' 카테고리의 다른 글
멀티스레드 환경에서 합병정렬을 통한 C++과 Go언어 성능비교 (0) | 2020.07.27 |
---|---|
Docker 설치 후 MariaDB 접속 시 host.docker.internal 호스트로 접속이 안되는 경우 해결법 (0) | 2020.07.22 |
[Windows] Postman 설치 및 실행 시 "Could not open Postman" 오류 발생 해결 방법 (1) | 2020.01.08 |
도커 node 이미지 변종 소개 (0) | 2019.11.14 |
코스 그레인드 (coarse-grained)와 파인 그레인드 (fine-grained) (1) | 2019.11.14 |