728x90
반응형
싱글쓰레드와 멀티쓰레드
싱글쓰레드는 하나의 쓰레드로 두 작업을 처리할 경우 한 작업이 마친 후 다른 작업을 시작하지만,
멀티쓰레드는 두 개의 쓰레드로 두 작업을 처리할 경우 짧은 시간동안 2개의 쓰레드가 번갈아가면서
처리되어 동시에 두 작업이 처리되는 것처럼 보입니다.
[ 싱글쓰레드와 멀티쓰레드 작업 비교 ]
하나의 쓰레드로 두 개의 작업을 수행한 시간과 두개의 쓰레드로 두 개의 작업을 수행한 시간은 거의
같습니다. 오히려 두 개의 쓰레드로 작업한 시간이 싱글쓰레드 작업시간보다 더 걸리게 되는데
그 이유는 쓰레드간의 작업전화에 시간이 걸리기 때문입니다.
단순 CPU만 사용하는 계산작업이라면 멀티쓰레드보다 싱글쓰레드가 더 효율적입니다.
CPU 이외의 자원을 사용하는 작업의 경우 싱글쓰레드 프로세스보다 멀티쓰레드 프로세스가
더 효율적입니다.
예 ) 사용자에게 데이터를 입력받는 작업
네트워크로 데이터를 주고받는 작업
프린터로 파일을 출력하는 작업
외부기기와의 입출력이 필요하는 작업
등등..
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | // 싱글쓰레드 예제 class SingleThreadEx{ public static void main(String args[]){ long startTime = System.currentTimeMillis(); for(int i=0; i<300; i++){ System.out.print("-"); } System.out.println("소요시간1 : "+(System.currentTimeMillis()-startTime())); for(int i=0; i<300; i++){ System.out.print("|"); } System.out.println("소요시간2 : "+(System.currentTimeMillis()-startTime())); } } /* 결과값 --------.. x300 소요시간1: 20초 ||||||||.. x300 소요시간2: 30초 */ | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | // 멀티쓰레드 예제 class MultiThreadEx{ public static void main(String args[]){ ThreadEx th1 = new ThreadEx(); // 새로운 쓰레드를 생성 th1.start(); // 새로운 쓰레드 실행 long startTime = System.currentTimeMillis(); for(int i=0; i<300; i++){ System.out.print("-"); } System.out.println("소요시간1 : "+(System.currentTimeMillis()-startTime())); } } class ThreadEx extends Thread{ for(int i=0; i<300; i++){ System.out.print("|"); } System.out.println("소요시간2 : "+(System.currentTimeMillis()-MultiThreadEx.startTime())); } /* 결과값 --------|||||||--------||||||| x300 ... -------- 소요시간1:20 |||||||| 소요시간2:20 */ | cs |
※ 자바가 OS(플랫폼) 독립적이라고 하지만 실제로 OS에 종속적인 부분이 몇 가지가 있는데 쓰레드도 그 중에 하나입니다.
[출처] [java] 싱글쓰레드와 멀티쓰레드|작성자 Simpolor
728x90
반응형
'JAVA > JAVA 스레드' 카테고리의 다른 글
[java] 쓰레드의 실행제어 (0) | 2017.11.02 |
---|---|
[java] 데몬 쓰레드 (0) | 2017.11.01 |
[java] 쓰레드 그룹 (0) | 2017.11.01 |
[java] 쓰레드의 우선순위 (0) | 2017.11.01 |
[java] start()와 run() (0) | 2017.11.01 |
[java] 쓰레드 구현 및 실행 (0) | 2017.11.01 |
[java] 프로세스와 쓰레드 (0) | 2017.11.01 |
Executor,ExecutorService,ThreadPoolExecutor (0) | 2016.03.09 |