멀티스레드 작업 수행시 프로세스와 같이 스레드간 Context Switching이 존재한다.
기본적으로 스레드의 스위칭보다 프로세스의 스위칭이 오버헤드가 큰 이유는 더 많은 정보가 교환되기 때문이다.
//멀티코어상에서 두개의 쓰레드를 실행하는 경우
class ThreadEx5 {
static long startTime = 0;
public static void main(String args[]) {
ThreadEx5_1 th1 = new ThreadEx5_1();
th1.start();
startTime = System.currentTimeMillis();
for(int i=0; i < 300; i++) {
System.out.print("-");
}
System.out.print("소요시간1:" + (System.currentTimeMillis() - ThreadEx5.startTime));
}
}
class ThreadEx5_1 extends Thread {
public void run() {
for(int i=0; i < 300; i++) {
System.out.print("|");
}
System.out.print("소요시간2:" + (System.currentTimeMillis() - ThreadEx5.startTime));
}
}
멀티코어상에서 두개의 스레드를 실행하는 경우
--------------------------------------------|||||||||-------------------------------------------------------------------------||||||||||||||||||||||||||||||||||||||||||||||||||---------------------------------------------------------
다음과 같이 출력이 겹치는 경우가 발생한다.(싱글코어의 경우 겹치지 않는다)
두 쓰레드가 서로 다른 자원을 사용하는 경우 멀티스레드가 더 효율적이다. 싱글 스레드의 경우 들어온 요청에 대해 대기를 할 경우 대기시간이 낭비되기 때문이다.