자바 병행 프로그래밍 - 장 동시 프로그래밍 과제

A, 자바 병행 프로그래밍 문제

주의가 필요한 동시 프로그래밍 문제 :

동시 프로그래밍의 목표는 프로그램이 프로그램의 최대 동시 실행을 할 수 있습니다 더 많은 스레드를 시작하는 빠른 실행,하지만 확인하는 것입니다. 당신이 동시 프로그램 실행 빠르게 확인하려면, 멀티 스레딩에 의해 다음과 같은 문제 도전의 대상이 될 :

하드웨어 및 소프트웨어 자원에 의해 제한 문제 교착 스위칭 스레드 콘텍스트.

1 스레드 컨텍스트 스위칭

DESCRIPTION 스위칭 스레드 컨텍스트 : 작업 시간 슬라이스 할당 알고리즘을 수행하는 CPU 사이클은 각 스레드가 현재 태스크 실행 스레드 타임 슬라이스의 종료 후에 다음 작업으로 전환 될 CPU 폴링에 의해 실행되는 정상적인 환경 하에서 작업이다. 스위치가 작업의 실행 상태 이전에 저장 한 다음 다시 다음 작업을위한 절단하는 경우, 작업 실행 단계로 위치를 알고있다. 하나의 작업에서 컨텍스트 스위치는 과정을 다시로드를 저장하는 것입니다.

적시는 동시성을 달성하기 위해 각각의 스레드에 단일 코어 프로세서, CPU 시간 슬라이스 내의 다수의 실행 스레드를 지원한다. CPU의 타임 슬라이스가 실행 시간의 스레드를 할당, CPU 시간 슬라이스 (수십 밀리 초) 매우 짧은, 그래서 CPU는 우리에게 여러 스레드가 동시에 실행 인상을주는, 스레드 스위칭 유지해야합니다.

모든 시간은 컨텍스트 스위치 따라서 멀티 스레딩의 구현의 효율성에 영향을 미치는, 자원의 소비를 필요합니다. 건조 멀티 일에, 모든 건조에 조금 뭔가 다른 작업을 수행하는 동안 사람과 마찬가지로 스위치가 손에서 현재 작업의 노드에 기록해야 할 때. 그래서 더 많은 것을 그는 더 높은, 문맥 전환의 비용을했고, 전체 효율을 낮 춥니 다.

핵심 아이디어는 컨텍스트 스위칭을 줄이기 위해 : 최대한 잠금의 사용을 줄이고, 스레드의 수를 최소화하고;

잠금이없는 동시 프로그래밍 : 문맥 전환의 원인, 공유 자원을 방지하는 멀티 스레드 스레드 잠금 경합으로 경쟁력있는 장면이다. 모듈 해시 태스크 세그먼트는 각각 다른 스레드 처리 작업 데이터를 사용할 수있다.

CAS 알고리즘 : 공유 자원 경쟁을 해결하고 잠금 장치의 사용을 방지하기 위해 (CAS) 알고리즘을 기본 코드를 사용하여 교체 비해 원자 자바 패키지.

스레드의 최소 수는 : 유휴 상태에서 많은 수의 스레드의 결과로 너무 많은 스레드를 생성하지 마십시오. 적은 작업, 스레드 및 더 많은 장면에서 그 결과, 대기 상태의 스레드와 같은 많은 수의.

코 루틴 : 스레드 세그먼트로 태스크의 수를 달성하고 단일 스레드에서 여러 작업을 전환 유지하기.

두 가지 방법은 스레드의 수를 최소화하는 것입니다 후 전 두 가지 방법이 잠금을 사용하지 않도록합니다.

2, 교착 상태

서로 필요한 자원을 보유 두 개의 스레드를, 그들이 리소스를 해제하기 위해 서로를 기다리는 동안, 납은 사람을 거부 서로 다른 두 개의 스레드를, 막힌 상황을 설명 : 교착 상태.

잠금이 성공적 등 발표 및 잠긴되지 않기 때문에 잠금 해제 주도 예외를 throw 할 때 우리는 일반적으로 코드 사족을 쓰지 않지만, 실제 작업에서 발생할 수있는 잠금이 해제 정상 또는 비정상 상태가 아닙니다.

교착 상태를 방지하는 방법 :

다수의 잠금을 획득 스레드를 동시에 피;

스레드가 동시에 자물쇠 잠금 자원의 보통 잠금 장치를 여러 자원을 보유하지 마십시오.

유효 시간을 초과 한 후 시간 잠금 장치를 사용해보십시오, 잠금이 자동으로 해제됩니다.

3, 자원 제약 도전

설명 : 영향을받는 프로그램의 실행 속도의 결과로 하드웨어 제한 또는 소프트웨어 자원에 따라 동시 프로그래밍합니다.

하드웨어와 소프트웨어가 특정 기준을 가지고 있어야한다는 전제 항공기, 동시 프로그래밍을 싸움을하지, 더 대공포가 없기 때문에 하드웨어 및 소프트웨어 자원의 한계는 결함이있다. 업그레이드 솔루션은 하드웨어와 소프트웨어를 업그레이드하는 것입니다.

 

추천

출처www.cnblogs.com/aoshicangqiong/p/11442350.html