멀티 스레딩은 단일 스레드보다 반드시 더 빠른 아니다

멀티 스레드는 우리에게 멀티 스레드 사실,이. 상황이 절대적인가 빠른 단일 스레드,하지만 많은 시간이 이상 할 가끔 멀티 스레드되지 않은 거짓 명제입니다, 빠른 단일 스레드보다 더 단일 스레드 너무 빨리. 없다는 인상을 준 것 같다  먼저 간단하게 동시 (동시)와 병렬 (병렬) 구별. 동시에에게 여러 개의 프로세서상에서 동시에 실행되는 명령어의 개수를 말하는 평행. 동시 평균 하나의 명령을 동시에 실행하지만 프로세스 (스레드) 커맨드 CPU 빠른 회전이 빠르고, 모양을 제공하는 "실행"인상, 한 번에 사실, 하나의 명령.입니다  하지만 우리는 실제로 멀티 스레드 응용 프로그램에서 사용하는 경우, 스레드 간의 회전 및 컨텍스트 전환은 많은 시간을 보낼 필요합니다, 그래서 우리는 순환 유사과 같은 작업을 수행 할 때, 바인딩되지 않은 다중 스레드가 의미하는 단일 스레드 그것은 빠른 (시간이 소요 전환 실행 스레드의 단일 스레드가 없기 때문에 )에서 다음 코드 조각 (보면 << 동시 자바 프로그래밍 기술 >>)

공공  클래스 ConcurrencyTest {
     개인  정적  최종  오래 계수 = 1000000000 ; 

    공공  정적  무효 메인 (문자열 []에 args) {
         시도 { 
            ) (병행; 
        } 캐치 (의 InterruptedException E) {
             // TODO 자동 생성 캐치 블록 
            e.printStackTrace (); 
        } 
        직렬 (); 
    } 

    개인  정적  무효 동시성 () 가 발생 예외 : InterruptedException {
          시작 =에 System.currentTimeMillis (); 
        스레드 스레드 = 새로운 스레드 ( 신규 의 Runnable () { 

            @Override 
            공개  공극 실행 () {
                  INT A = 0 ;
                   ( 길이 I 카운트 <; 내가 ++ I = 0 ) 
                 { + = 5 ; 
                 } 
            } 
        }); 
        thread.start (); 
        INT의 B = 0 ;
         ( 길이 ; i가 카운트 <I는 I = 0 + + ) 
        {
            (B) - ; 
        } 
        를 Thread.join (); 
         시간 =에 System.currentTimeMillis는 () - 시작; 
        에서 System.out.println ( "병행"+ 시간 + "MS, B ="+ b); 
    } 

    개인  정적  무효 직렬 () {
          시작 = System.currentTimeMillis는 ();
        INT의 A = 0 ;
         ( 길이 I = 0; I <카운트, 내가 ++ ) 
        { + = 5 ; 
        } 
        INT에서 B = 0 ;
        대한 (난 = 0; 난 카운트 <; 난 ++ ) 
        { 
            B가 - ; 
        } 
         시간 = System.currentTimeMillis는 ()가 - 시작; 
        에서 System.out.println ( "병행"+ 시간 + "MS, B ="+ b); 
    } 

}


카운트 값이 멀티 스레드 속도가 될 때 카운트 값이 상대적으로 큰 경우 단일 스레드 실행보다 빠른, 멀티 스레드 때 상대적으로 작은 경우이 코드의 결과는 실행되는 약 2 배 단일 스레드이 일어날 이유는, 이론적으로,이 코드는 작업을 실행하는 것은해야 확실히 빠른 멀티 스레드 물고기 그것보다 단일 스레드 컨텍스트 스위칭을 필요로하지 않습니다.
 사실, 우리가 진실하게 좋은 때문에, CPU 자원은 자바 프로그램이 다른를 사용하는 모든 사용자에게 제공되지 않습니다 프로그램은 CPU 리소스 아를해야한다. 예를 들어, 우리는이 프로그램을 실행하지 않은 경우 운영 체제가 실제로 50 스레드 우리가이 프로그램을 실행하면 다음이 CPU51 당 하나의 스레드를 차지합니다, 실행 할 수 있습니다 시간 1, 멀티 스레드 CPU52는 회전 시간이 상대적으로 문맥의 상대적으로 적은 수의 사이에 걸릴 때, 그것은 물론. 빠르게 실행됩니다 말, 시간의 3 분의 2를 차지합니다 (각 스레드가 시간을 소비 동등한 것으로 가정) 더 많은 시간 멀티 스레딩이 시간 CPU52 두 3 분 걸리지 만이 단일 스레드보다 느린 있도록 스위치는 많은 시간이 필요하지만 지금이 시간
.

추천

출처www.cnblogs.com/amiezhang/p/11285781.html