예술 1.java 동시 프로그래밍 - 동시 프로그래밍 문제

콘텍스트 스위칭 1.1

  단일 코어 프로세서는 각 쓰레드 CPU 시간 슬라이스를 할당하여이를 위해 멀티 스레드 코드 실행, CPU 메커니즘을 지원한다. CPU의 타임 슬라이스는 매우 짧은 시간 슬라이스 때문에, CPU는 항상 스레드 스위칭에 의해 수행되는 각 스레드에 대해 할당 된 시간이다.

  또한 작업 시간 슬라이스 현재 태스크의 실행 시간 분할을 수행하기 위해 CPU 사이클에서 다음 작업 할당 알고리즘으로 전환한다. 다음 상태는 다음 작업으로 다시 전환 할 수 있도록 작업 스위치가 상태를 저장하기 전에 작업 부하에서 프로세스를 저장할 수 있도록, 당신은 오후에 다시 전환, 작업을로드 할 수 있습니다.

  우리가 같은 시간에 두 권의 책을 읽을처럼 우리가 다시 한 번 영어로 기술 책입니다 때, 우리는 단어가 인식되지 않는 것으로, 다음 영어 사전을 열고,하지만 우리는 기술 책을 마련 할 필요가 그 전에이 책 읽기의 얼마나 많은 페이지를 기록 발견이다 의를 마무리 한 후 행, 단어 등의 수는이 책을 읽고 계속합니다. 이 스위치는 또한 다중 스레드의 실행 속도에 영향을 미칠 것 같은 컨텍스트 스위치를 읽기의 효율성에 영향을 미칠 것입니다.

1.1.1 멀티 스레딩 특정 빨리 당신에게

  

공용 클래스 ConcurrencyTest { 

    개인 정적 최종 오래 계수 = 100001; 

    공공 정적 무효 메인 (문자열 []에 args) {예외 : InterruptedException 발생 
        동시성 (); 
        연속물(); 
    } 
    개인 정적 무효 동시성 () {예외 : InterruptedException을 발생 
        긴에 System.currentTimeMillis startTime을 = (); 
        스레드 스레드 = 새로운 스레드 (() -> { 
            INT를 A = 0; 
            I <카운트; 내가 ++) {(길이 I = 0 
                A + = 5; 
            } 
        }); 
        thread.start (); 
        INT의 B = 0; 
        대 (길이 I = 0; I ++가 나는 카운트 <) { 
            b-- 단계; 
        }
        를 Thread.join ();
        긴 endTime- 사용자에 System.currentTimeMillis = (); 
        에서 System.out.println (endTime- 사용자 - startTime을 + "MS, B ="+ b); 
    } 

    전용 직렬 정적 무효 () { 
        길이에 System.currentTimeMillis startTime을 = (); 

        INT의 A = 0; 
        대 (길이 I = 0; I <카운트, 내가 ++) { 
            A + = 5; 
        } 
        INT에서 B = 0; 
        대 (길이 I = 0; I ++가 나는 카운트 <) { 
            b-- 단계; 
        } 
        긴 endTime- 사용자에 System.currentTimeMillis = (); 

        에서 System.out.println (endTime- 사용자 - startTime을 + "MS, B ="+ B + "--- A ="+ A); 
    } 
}

  

  작업이 백만 배 이상을 축적하지 않는 경우 동시에 실행 테이블에서 발견 속도는 작업, 왜 동시 실행 속도는 시리얼에 비해 속도가 느려집니다 축적 직렬 실행보다 느리게 될 것인가? 생성 스레드 문맥의 오버 헤드가 전환되기 때문이다.

시간 및 기간을 전환 1.1.2 테스트 콘텍스트

추천

출처www.cnblogs.com/panda777/p/11295094.html