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
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,