멀티 스레딩 학습 요약 (A)

1. 개념의 정의

1.1 CPU는 무엇입니까?

(1)하기, VLSI 인 컴퓨팅 코어 및 코어 제어 컴퓨터이고, CPU를 CentralProgressingUnit.
(2) CPU는 연산 유닛, 캐시 메모리 버스를 포함한다.

(3) 컴퓨터가 지시 데이터 해석 주로 작동하는 컴퓨터 소프트웨어의 처리를 행한다. 그것은 당신의 컴퓨터에서 가장 중요한 역할을하는 다양한 애플리케이션을위한 시스템 제어 센터, 통합 조정 및 제어를 구성한다.

1.2 프로세스가 무엇입니까?

프로세스는 데이터 세트의 활동을 실행하는 독립적 인 응용 프로그램의 함수이다. 처리 시스템은 자원 할당 및 스케줄링 별도의 유닛이다.

단순, 그냥 내 일상 생활처럼, 컴퓨터 응용 프로그램에서 열립니다 (예 : QQ 음악, 텐센트 비디오, 등). 나는 작업 관리자 전분기 음악 프로그램이이 과정 실행에가 볼 수 있습니다. 우리는 텐센트 비디오를 열면 때 프로세스 (텐센트 비디오) 더 될 것입니다.

1.3 스레드는 무엇입니까?

스레드, 프로세스가 속하는 엔티티 과정 CPU 스케줄링 및 디스패치의 기본 단위이다. 프로세스와 자원의 자원 할당, 모든 스레드 프로세스를 공유

우리는 전분기 음악을 열 때, 우리는 먼저 프로세스가 재생을 수행하는 스레드를 만들 것이다, 음악 플레이어를 클릭 한 다음 당신은 음악 소리를들을 수 있습니다. 이 시점에서, 우리는 검색 패널을 열 수 있습니다 음악 XXX를 검색합니다. 그런 다음 끝나지 않았다 음악을 스레드,하지만 다른 스레드에 의해 검색 작업을 수행 할 수 있습니다. (많은 관계로 하나)

1.4 관계의 멀티 스레딩 및 CPU?

싱글 코어 CPU는 단위 시간 당 하나의 스레드 만이 작업을 수행 할 수 있습니다. 즉, A와 B 두 스레드를 실행 B.에서 수행하는 때까지 보류 할 때 실행될

멀티 코어 CPU는 단위 시간당 다중 스레드 작업을 수행 할 수 있습니다. 2 개의 코어 CPU가 실행 핵 2CPU에 대한 실행하는 코어 끈, 및 스레드 B를 1CPU 사실 병렬 실행을 가능하게한다.

1.5 동시성은 무엇인가? 병렬은 무엇인가?

병렬 : 동시에 처리 로직에 대해 수행 CPU 인스턴스 또는 다수의 기계가 복수 동시에 사실이다.

동시성 : CUP 스케줄링 알고리즘에 의해, 사용자가 동시에 볼 수는 사업장 단위 동안 CPU에서 정말 실제로 수행합니다. 동시 종종 공공 자원을 공공 자원의 조정이 어려운 과정 및 스레드 동시성이 필요합니다.

나는 싱글 코어 CPU 컴퓨터 인 경우 예를 들어, 내가 QQ 음악 앱을 열고 음악을 재생합니다. 동시에, 나는 리그를 열어 게임을 시작할 준비가되어 있습니다. 그런 다음 그들은 두 프로세스하지만, 단지 단위 작업 당 하나 개의 스레드를 실행할 수 있습니다. 영웅을 재생하기 위해 연합 (EU), QQ 음악 재생을 중지하지 않을 경우. CPU 스케줄링 알고리즘은 리그 오브 레전드에 사용되며 전분기 음악 토글 실행 (물론, 인간의 반응 시간보다 훨씬 더 빠릅니다), 우리는 같은 시간에 음악을 재생하고 게임을해야 할 것은 실행의 환상이다.

그것이 멀티 코어 CPU의 경우는, CPU 코어는 전분기 음악, 영웅 연합 (EU) 집행을 실행할 수 있습니다.

1.6 쿼드 코어 팔 스레드는 무엇입니까?

컴퓨터를 구입할 때, 때 CPU는 기준 값입니다 소개합니다. 결국 그 약간 지혜는 의미입니까?

상술하는 CPU는 단지 시간의 단위 당 하나 개의 스레드를 실행할 수있다. 당신은 시간의 단위로 작업 할 경우 두 기관의 CPU 유닛이없는 한 하나 개 이상의 스레드가 불가능하다. 멀티 코어 기술 (또는 직접 두 개의 CPU 칩을) 하나의 패키지에 배치 같은 여러 CPU이며, 인텔 HT 기술은 두 개의 스레드에 CPU 시뮬레이션의 CPU 내에서 필요한 자원을 복사하게된다 즉이며, 고체 코어는 두 개의 논리 스레드는, 단위 시간 내에 처리는 물리적 듀얼 코어 듀얼 스레드 동작을 시뮬레이션하기 위해 두 개의 스레드를 작동한다.

그래서, 네 여덟 개 스레드 쿼드 코어 CPU를 대신하여, CPU 당 8 개 개의 스레드가 두 대표 논리 스레드가 있습니다. 단위 시간 당 최대 8 개 스레드 작업을 수행 할 수 있습니다.

2. 멀티 스레딩 수명주기

 

: 스레드는 다섯 개 국가 포함
1. 뉴 (새로운) :이 상태에서 스레드 객체가 생성, 그것은 것 잠깐 동안 만. 이 시점에서 시스템 자원을 할당되어 있어야하고, 초기화가 수행됩니다. 예를 들어, 스레드의 스레드 = 새로운 스레드 () .
(2), 준비 (Runnable를이)라고 "실행 상태입니다." 실 객체가 생성 된 후에 스레드를 시작하기 위해, 다른 스레드가 상기 객체의 시작 () 메소드를 호출한다. 예를 들어, thread.start (). 언제든지 준비 상태 스레드가 CPU 스케줄링에 의해 실행될 수있다.
3, 실행 (실행) : CPU의 스레드가 실행을 위해 허가를 받아야합니다. 참고 : 작동 상태로 준비 상태에서 단지 스레드를.
(4) 차단 (차단) : 스레드가 일시적으로 실행을 중지 CPU를 사용할 수있는 권리를 포기하는 어떤 이유로 차단됩니다. 준비 상태로 스레드까지 기회가 실행 이동합니다. : 장애물의 사례는 세 가지 유형으로 나누어
(1) 대기 차단 된 : 호출 스레드에 의해 () 메소드 대기, 그래서 작업의 완료를 위해 대기 스레드.
(2) 동기 차단 : 동기화 스레드 동기화 잠금 실패 (잠금 다른 스레드에 의해 점유되어 있기 때문에)을 얻을, 그것은 동기 차단 상태가됩니다.
(3) 기타 차단 : 슬립 (호출 스레드) 또는 차단 상태로 I / O 요청 스레드를 실행. 슬립 () 시간 제한, 조인 () 종료 스레드 또는 타임 아웃 될 때까지 대기하는 경우에. 또는 I / O 처리가 완료되면, 다시 준비 상태로 스레드.
5. 죽음 (죽은) : 스레드 실행이 이상하거나 인해 비정상 종료에 실행 () 메소드, 수명주기의 스레드 끝입니다.

3. 멀티 스레드 만들기

방법 1 :
 에 대한 패키지 페널티 com.my.thread;
 / ** 
 * 상속 스레드가 스레드를 만들 수 있습니다 
 * @ 저자 : onereader 
 * @ 날짜 : 2018년 9월 5일 
 * / 
공용  클래스 MyThreadDemo1 (가) 확장 스레드 {
     공공  정적  무효 메인 (문자열 [] 인수를 ) { 
        MyThreadDemo1 T1 = 새로운 새 MyThreadDemo1 (); 
        t1.start () 
        에서 System.out.println ( "메인 쓰레드 ' ); 
    } 

    @Override 
    공개  공극 RUN () { 
        에서 System.out.println는 ( "스레드 달성 스레드 상속을 사용하여 만든 " ); 
    } 

} 
두 번째 방법 : 
패키지com.my.thread;
 / ** 
 * 생성 된 Runnable 인터페이스를 구현 
 *의 @ 저자 : onereader 
 *의 @ 날짜 : 2018년 9월 5일 
 * / 
공용  클래스 MyThreadDemo2 구현 의 Runnable {
     공공  정적  무효 메인 (문자열 []에 args) { 
        MyThreadDemo2 T2 = 새로운 새 MyThreadDemo2 () 
        스레드 T = 새로운 새로운 스레드 (T2) 
        t.start () 
        에서 System.out.println ( "메인 쓰레드" )
         에 대한 ( INT I = 1]. I 100 <; I는 ++ ) { 
            시스템. Out.println ( "메인 쓰레드 출력 :"+ I);  
        }
    }

    @Override 
    공개  공극 RUN () { 
        에서 System.out.println ( "실행 가능한 스레드 작성 인터페이스" )
         에 대한 ( INT I = 1; I <100; I ++이. ) { 
            에서 System.out.println ( "출력 스레드 MyThreadDemo2"+ 내가); 
        } 
    } 

} 
세 가지 방법 : 
대한 패키지 페널티 com.my.thread, 

가져 오기 java.util.concurrent.Callable,
 가져 오기 java.util.concurrent.FutureTask; 

/ ** 
 * 클래스 내부 스레드 생성 
 *를 @ 작성자 : onereader 
 * @ 날짜 : 2018년 9월 5일 
 * / 
공용  클래스 MyThreadDemo3 {
         정적 클래스 ThreadDemo는 구현 호출 가능 <문자열> { 
            @Override 
            공공 문자열 호출 () { 
                에서 System.out.println ( "안녕하세요 스레드" );
                반환 "호출 가능 반환 값을" ; 
            } 
        } 
        공공  정적  무효 메인 (문자열 []를 인수) { 
            ThreadDemo threadDemo = 새로운 ThreadDemo (); 
            FutureTask <문자열> = futureTask 새로운 FutureTask <문자열> (threadDemo); 
            스레드 스레드 =  스레드 (futureTask);
            thread.start (); 
            시도 { 
                에서 System.out.println (futureTask.get ()); 
            } 캐치 (예외 전자) { 
                e.printStackTrace (); 
            } 
        } 
}
以上只是个简单的总结,后续会更精彩的哟!

추천

출처www.cnblogs.com/one-reader/p/11305920.html