마음만은 새내기

항상 초심을 잃지 않고 생활하겠습니다~!

프로그래밍

각 언어별 성능 테스트!! : 1. 개관 및 (기본 언어) 입력 성능 편

동동매니저 2019. 8. 21. 19:32
안녕하세요.....
방학 도중에 거의 집에서'만' 생활을 하다 보니... (가끔씩 학교도 갔지만요...)
매일 매일 심심하기도 했죠...
(친구들과 카톡으로 연락하기도 했고...)

그래서!! 제가 최근에 대규모 프로젝트(?)를 준비했어요~!
바로 '언어별 성능 테스트'인데요,
프로그래밍을 하면서 자주 사용되는 C, C++, Java, Python 3 등을 비롯한 언어 뿐 아니라,
Pascal, Ruby, Kotlin(Native), Go, Lua, Perl, Fortran 등(예정!!) 다양한 언어에 대해서
기본적인 성능 테스트를 수행 해보려고 해요~!
(많은 응원 부탁드려요......)

테스트 유형으로는 가장 기본적인 입출력부터 시작해서
정렬, 연산(소수의 개수 구하기), 부동 소수점 연산
여러가지 테스트를 언어별로 수행할 예정이고, 지금 진행 중에 있어요~!

참... 본격적인 시작에 앞서, 테스트 환경을 알려드릴게요~!
※ OS : Ubuntu 16.04.6 LTS
※ CPU : Intel Core i7-8550U (4코어)
※ RAM : 8GB

※ 시간 측정 횟수 : 10+a회 (여러 번 측정 후, 중앙값 10개의 평균을 반영)
※ 측정 환경 및 컴퓨터 성능에 따라 결과가 다를 수 있음에 주의하세요~!

(언어별 컴파일 및 실행 옵션, 컴파일러 버전 등은 나중에 별도로 작성 예정!!)

이제... 본격적으로 테스트를 시작해볼까요?

★ 입력 성능 테스트
※ 테스트 방법 : 32bit 범위의 정수 N개의 합 구하기, N=1000만 (음수 포함!!)
※ 테스트 언어 : C, C++, Java, Python 3, Pascal
※ 테스트 결과 (언어, 입력 방법, 평균 시간 순)

1위!!!
언어 : C++
입력 방법 : mmap
평균 시간 : 181.9 ms
참고 사항 : Linux 계열 OS에서만 사용 가능한 듯... 하지만 매우 빠른 속도!!!

2위!!
언어 : C
입력 방법 : fread를 통해 블록 단위로 읽은 후, 정수 단위로 해석
평균 시간 : 386.7 ms
참고 사항 : 1위 기록의 2배를 넘으며, scanf를 통한 입력보다 코드가 복잡함.

3위!
언어 : C
입력 방법 : getchar를 통해 문자 단위로 읽은 후, 정수 단위로 해석
평균 시간 : 623.5 ms

4위.
언어 : Java
입력 방법 : BufferedReader를 통해 줄 단위로 읽은 후, Integer.parseInt를 통해 정수로 해석
평균 시간 : 702.8 ms
참고 사항 : 코드 작성 시 예외 처리 구문 필수!!

5위.
언어 : C++
입력 방법 : 코드 초반에 ios_base::sync_with_stdio(false); 코드를 추가한 후, std::cin을 사용
평균 시간 : 743.2 ms
참고 사항 : ios_base::sync_with_stdio(false); 코드가 없으면 속도가 느려짐.

6위.
언어 : Pascal
입력 방법 : READ
평균 시간 : 1049.2 ms
참고 사항 : Pascal 언어가 생소할 수 있음.

7위.
언어 : C
입력 방법 : scanf
평균 시간 : 1214.1 ms
참고 사항 : C언어의 가장 기본적인 입력 구문...

8위.
언어 : C++
입력 방법 : std::cin
평균 시간 : 3850.2 ms
참고 사항 : C++의 기본적인 입력 구문으로, 코드 1줄의 힘이 확실히 느껴짐.

9위.
언어 : Python 3
입력 방법 : int(sys.stdin.readline())
평균 시간 : 5061.0 ms
참고 사항 : Python이 인터프리터 언어라서 그럴까?? 확실히 느렸음.

10위.
언어 : Java
입력 방법 : Scanner
평균 시간 : 6718.7 ms
참고 사항 : Java의 기본적인 입력 방법

11위.
언어 : Python 3
입력 방법 : int(input)
평균 시간 : 12847.5 ms
참고 사항 : 아무래도 Python이 확실히 느린 듯...

필자가 테스트에 사용한 약 105MB의 파일을 읽어서 이를 처리하는 속도가 언어별 속도의 차이는 있지만,
105MB의 용량에 비하면 속도가 빠르다는 생각이 들었어요...
(게다가 정수의 개수도 1000만개......)

지금까지 긴 글 읽어주셔서 감사드리며,
다음 글에는 기본적인 언어의 출력 성능에 관한 내용을 다뤄볼게요~!
그럼 20000~!