하나의 쓰레드로 두 작업을 처리하는 경우는 한 작업을 마친 후에 다른 작업을 시작하지만, 두 개의 쓰레드로 작업 하는 경우에는 짧은 시간동안 2개의 쓰레드가 번갈아 가면서 작업을 수행해서 동시에 두 작업이 처리되는 것과 같이 느끼게 됩니다.
하나의 쓰레드로 두개의 작업을 수행한 시간과 두개의 쓰레드로 두개의 작업을 수행한 시간은 거의 같습니다. 오히려 두개의 쓰레드로 작업한 시간이 싱글쓰레드로 작업한 시간보다 더 걸리게 되는데 그 이유는 쓰레드간의 작업전환(context switching)에 시간이 걸리기 때문입니다.
그래서 단순히 CPU만을 사용하는 계산작업이라면 오히려 멀티쓰레드보다 싱글쓰레드로 프로그래밍하는 것이 더 효율적입니다.
작업전환 할 때는 현재 진행 중인 작업의 상태, 예를 들면 다음에 실행해야할 위치(PC, 프로그램 카운터)등의 정보를 저장하고 읽어 오는 시간이 소요됩니다. 참고로 쓰레드의 스위칭에 비해 프로세스의 스위칭이 더 많은 정보를 저장해야하므로 더 많은 시간이 소요됩니다.
싱글쓰레드로 2개의 작업을 진행한 시간을 구해보았습니다.
그럼 아래에 쓰레드를 하나 더 생성하여 두가지 작업을 수행한 시간을 측정해보도록 하겠습니다.
두개의 쓰레드로 두개의 작업을 실행한 결과가 좀 전의 싱글쓰레드로 작업한 것보다 시간이 더 걸린것을 확인할 수 있습니다.
하지만 CPU이외의 자원을 사용하는 작업의 경우에는 싱글쓰레드 프로세스보다 멀티쓰레드 포르세스가 더 효율적입니다. 예를 들면 사용자로부터 데이터를 입력받는 작업, 네트워크로 파일을 주고받는 작업, 프린터로 파일을 출력하는 작업과 같이 외부기기와의 입출력을 필요로 하는 경우가 이에 해당됩니다.
이 포스트가 도움이 되셨다면 공감버튼을 눌러주세요. ^^*
AWT ( Abstract Window Toolkit ) - Frame, Button, Choice (0) | 2019.05.02 |
---|---|
쓰레드의 우선순위와 쓰레드 그룹 (0) | 2019.04.29 |
프로세스와 스레드 (0) | 2019.04.25 |
DecimalFormat, SimpleDateFormat, ChoiceFormat, MessageFormat (0) | 2019.04.24 |
Scanner, StringTokenizer (0) | 2019.04.23 |
댓글 영역