자바 고 효율 병행
동시 다발 의 내막 을 이해 하 는 것 은 고급 프로그래머 에 게 없어 서 는 안 될 과정 이다.
자바 메모리 모델
자바 메모리 모델(JMM)과 JVM 이 실 행 될 때 데이터 영역 은 같은 개념 이 아니 라 자바 대상 모델 이 다음 에 따로 꺼 내 서 말 할 수 있다 는 개념 도 있 습 니 다.
JMM 은 모두 원자 성,가시 성,질서 성 을 중심 으로 한다
메모리 간 상호작용:Lock,Unlock 주 메모리 Read,Write 주 메모리 Load,Store 작업 메모리 의 변수 Use,Assign 작업 메모리 의 변수
JMM 에 대한 더 많은 정보 보기,다 중 스 레 드 자바 메모리 모델
Volatile
Volatile 은 자바 가상 컴퓨터 에서 제공 하 는 가장 경량급 동기 화 메커니즘 이 라 고 할 수 있 는데 이것 은 가시 성과 질서 성 만 보장 하고 원자 성 을 보장 하지 않 는 다.
가시 성:한 라인 이 이 변수의 값 을 수정 하면 새로운 값 은 다른 라인 에 있어 서 바로 알 수 있 고,다른 두 라인 은 가시 성 을 실현 할 수 있 는 키워드:
Synchronized
와final
질서 성:만약 에 본 스 레 드 에서 관찰 하면 모든 조작 이 질서 가 있 습 니 다.만약 에 한 스 레 드 에서 다른 스 레 드 를 관찰 하면 모든 조작 이 무질서 합 니 다.자바 와 스 레 드
병발 은 PHP 에서 흔히 볼 수 있 는 다 중 프로 세 스 병발 과 같은 다 중 스 레 드 에 의존 하지 않 습 니 다.자바 의 Thread 류 의 모든 관건 적 인 방법 은 Native 로 성명 되 어 있 기 때문에 자바 는 스스로 스 레 드 를 실현 하지 않 았 습 니 다.
스 레 드 를 실현 하 는 세 가지 방식:커 널 스 레 드 를 사용 하여 실현 하고 사용자 스 레 드 를 사용 하여 더욱 경량급 프로 세 스 를 실현 합 니 다.
단점:각종 스 레 드 작업,예 를 들 어 생 성,분석,동기 화 는 시스템 호출 을 해 야 하고 시스템 호출 의 대가 가 비교적 높 으 므 로 사용자 상태 와 커 널 상태 에서 왔다갔다 전환 해 야 합 니 다.커 널 자원 을 소모 하면 시스템 이 경량급 프로 세 스 를 지원 하 는 수량 이 제한 되 어 있 습 니 다.
4.567917.사용자 스 레 드 가 실현 되 고 넓 은 의미 에서 볼 때 하나의 스 레 드 가 커 널 스 레 드 가 아니라면 임 무 는 사용자 스 레 드 입 니 다.사용자 스 레 드 는 완전히 사용자 상태 에서 이 루어 집 니 다.커 널 의 도움 없 이 더 큰 스 레 드 수 를 지원 할 수 있 습 니 다
단점:내부 핵 지원 이 없어 각종 조작 이 복잡 하 다.이 제 는 거의 버 렸 다.
4.567917.사용자 스 레 드+경량급 프로 세 스 는 두 가지 점 을 종합 하면 사용자 프로 세 스 와 경량급 프로 세 스 의 수량 비례 가 정 해 지지 않 습 니 다
스 레 드 스케줄 링
협동 식 스케줄 링:장점 은 간단 한 것 을 실현 하 는 것 이다.전환 작업 은 라인 자체 에 대해 알 수 있 고 라인 동기 화 문제 가 없다.라인 은 자신의 일 을 끝 낸 후에 야 라인 전환 을 한다.
단점:프로그램 작성 이 불안정 하면 시스템 을 제어 할 수 없습니다.하나의 프로 세 스 가 CPU 실행 을 양보 하지 않 으 면 시스템 이 붕 괴 될 수 있 습 니 다.
선점 식 스케줄 링(자바 기본 스케줄 링):모든 스 레 드 는 시스템 에서 실행 코드 를 분배 합 니 다.스 레 드 의 전환 은 스 레 드 에 의 해 결정 되 지 않 습 니 다.프로 세 스 에 문제 가 발생 하면 시스템 은 이 프로 세 스 를 죽 일 수 있 습 니 다.
주의:스 레 드 의 우선 순위 가 높 을 수록 스 레 드 가 먼저 실행 되 는 것 이 아 닙 니 다.다만 우선 순위 가 높 은 스 레 드 가 선택 되 었 을 수 있 습 니 다.
Java 스 레 드 상태 변환
그림 을 한 장 붙 이 고 잘 기억 하 세 요.
스 레 드 안전 실현 방법
4.567917.서로 배척 하고 동기 화 하 며 잠 금,비관 적 인 방안 을 추가 하여 공유 데이터 가 같은 시간 에 하나의 스 레 드 만 방문 하도록 확보한다.서로 배척 하 는 것 은 원인 이 고,동기 화 는 과일 이다
4.567917.비 차단 동기 화,CAS,낙관적 인 방안 은 먼저 조작 을 하고 다른 스 레 드 가 없 으 면 조작 이 성공 합 니 다.다른 스 레 드 도 공유 데 이 터 를 조작 하고 있다 면 다시 시도 합 니 다
4.567917.동기 화 방안 이 없 으 면 보통 순수 코드 이 고 일부 특성 이 있 습 니 다.예 를 들 어 쌓 인 공공 시스템 자원 에 의존 하지 않 습 니 다자물쇠 최적화
4.567917.자전 자물쇠 와 자가 적응 자전 만약 에 데 이 터 를 공유 하면 아주 짧 은 시간 만 지속 된다.이 시간 을 위해 끊 고 회복 하 는 스 레 드 는 가치 가 없다.이때 우 리 는 뒤에 자 물 쇠 를 요청 하 는 스 레 드 를 잠시 기다 리 게 하고 스 레 드 를 바 쁜 순환(자전)하 게 할 수 있다.이것 이 바로 자전 자물쇠 이다
데이터 가 얼마나 잠 겨 있 는 지 공유 할 가치 가 없 기 때문에 맹목적 인 자전 은 성능 의 손실 을 초래 할 수 있 습 니 다.JDK 1.6 이후 시스템 은 자체 적 으로 적응 하 는 자전 을 도 입 했 고 한 번 의 공유 데이터 가 잠 겨 있 을 때 시스템 에 가입 하여 여러 번 자전 자 물 쇠 를 얻 었 습 니 다.시스템 은 스 레 드 가 자전 하 는 횟수 를 더 오래 허용 할 수 있 습 니 다.만약 여러 차례 자전 자 물 쇠 를 얻 지 못 했다 면 시스템 은 다음 에 자전 자 물 쇠 를 생략 할 것 이다.
4.567917.자 물 쇠 는 공유 데이터 경쟁 이 존재 하지 않 는 자 물 쇠 를 없앤다
4.567917.자물쇠 가 굵 어 지면 여러 조작 이 같은 대상 에 자 물 쇠 를 추가 하고 잦 은 자 물 쇠 를 추가 하 는 것 도 성능 에 영향 을 줄 수 있 으 므 로 시스템 은 자물쇠 의 동기 화 범 위 를 확대 한다.StringBuffer()와 같은 여러 append 작업..
4.567917.편향 자 물 쇠 는 편향 자물쇠 로 이해 할 수 있 습 니 다.자 물 쇠 는 첫 번 째 로 스 레 드 를 얻 는 것 에 치 우 칩 니 다.만약 에 다음 실행 과정 에서 이 자 물 쇠 는 다른 스 레 드 에 의 해 가 져 오지 않 으 면 편향 자 물 쇠 를 가 진 스 레 드 는 동기 화 할 필요 가 없습니다
마지막.
동시 다발 의 내막 을 이해 하 는 것 은 고급 프로그래머 에 게 없어 서 는 안 될 과정 이다.
레 퍼 런 스
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JPA + QueryDSL 계층형 댓글, 대댓글 구현(2)이번엔 전편에 이어서 계층형 댓글, 대댓글을 다시 리팩토링해볼 예정이다. 이전 게시글에서는 계층형 댓글, 대댓글을 구현은 되었지만 N+1 문제가 있었다. 이번에는 그 N+1 문제를 해결해 볼 것이다. 위의 로직은 이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.