JAVA Actor 모델 의 일치 성과 격 리 성에 대해 논 하 다.

4048 단어 JAVAActor모형.
1.Actor 모델 소개
단일 핵 CPU 의 발전 이 병목 에 이 르 렀 던 오늘날 하드웨어 의 속 도 를 높이 려 면 CPU 핵 수 를 늘 리 는 것 이 더 많다.이런 상황 에 대해 우리 의 프로그램 운행 효율 을 높이 려 면 병발 방면 에서 착수 해 야 한다.전통 적 인 다 중 스 레 드 방법 은 bug 가 나타 나 기 쉬 워 유지 하기 어렵 지만 걱정 하지 마 세 요.오늘 은 다른 병행 모델 을 소개 하여 이런 문 제 를 어느 정도 해결 할 수 있 습 니 다.그것 이 바로 Actor 모델 입 니 다.
Actor 모델 은 한 그룹의 규칙 을 정의 하 는 것 이다.이런 규칙 들 은 한 그룹의 시스템 에서 각 모듈 이 어떻게 상호작용 하고 응답 하 는 지 규정 한다.하나의 Actor 시스템 에서 Actor 는 가장 작은 단원 모듈 로 시스템 은 여러 개의 Actor 로 구성 된다.각 Actor 는 두 가지 물건 이 있 는데 하 나 는 mailbox 이 고 하 나 는 자신의 상태 입 니 다.동시에 Actor 는 수신 과 발송 기능 이 있 습 니 다.다음 코드 는 대략적인 Actor 사례 를 보 여 줍 니 다.

trait Actor {
 //               
 val state:Integer = 0;
 //    mailbox    
 val mailBox:mutable.Queue[Message] = scala.collection.mutable.Queue[Message]()
 def send(message : Message): Unit ={
  ...
 }
 def recive(): Unit ={
  ...
 }
}
Actor 가 메 시 지 를 받 으 면 다음 세 가지 작업 중 하 나 를 수행 합 니 다.
다른 Actor 를 만 듭 니 다다른 Actor 에 게 메 시 지 를 보 냅 니 다자신의 상 태 를 수정 하 다.
주의해 야 할 것 은 많은 Actor 가 동시에 실행 되 지만 하나의 actor 는 정 보 를 순서대로 처리 할 수 밖 에 없다 는 것 이다.즉,다른 Actor 가 한 Actor 에 게 세 가지 메 시 지 를 보 냈 는데 이 Actor 는 한 번 에 한 가지 만 처리 할 수 있다.그래서 만약 당신 이 세 가지 소식 을 병행 처리 하려 고 한다 면,당신 은 이 소식 을 세 개의 actors 에 보 내야 합 니 다.
다음 그림 은 간단 한 Actor 모델 시스템 을 보 여 줍 니 다.

Actor 모델 의 대략적인 규칙 을 알 게 된 후에 우 리 는 두 가지 구체 적 인 예 로 Actor 모델 의 묘미 와 부족 을 살 펴 보 자.
두 가지 예
2.1 소수 계산
만약 에 우리 가 지금 임무 가 있다 고 가정 하면 100000 이내 의 소수 개 수 를 찾 고 다 중 스 레 드 방식 으로 실현 해 야 한다.
아래 그림 은 공유 메모 리 를 사용 하 는 방식 과 Actor 모델 로 병행 하 는 방식 을 보 여 준다.

여기 서 두 가지 처리 병발 의 서로 다른 사고방식 을 보 여 주 었 다.전통 적 인 방식 은 자물쇠/동기 화 방식 을 통 해 병발 을 실현 하고 매번 동기 화 를 통 해 현재 값 을 얻 으 며 한 라인 으로 값 이 소수 인지 아 닌 지 를 판단 하 게 하 는 것 이다.그렇다면 동기 화 방식 으로 계수기 에 1 을 더 하 는 것 이다.
Actor 모델 을 사용 하 는 것 은 다 릅 니 다.이 과정 을 몇 개의 모듈 로 나 누 었 습 니 다.즉,몇 개의 Actor 로 나 누 었 습 니 다.각 Actor 는 서로 다른 부분 을 책임 지고 소식 을 전달 하 는 방식 으로 이 몇 개의 Actor 를 협동 하여 일 하 게 하 며 그 중에서 주요 계산 과 관련 된 Actor 는 여러 개가 있 고 여러 개의 Actor 협동 작업 을 통 해 병행 할 수 있다.
2.2 은행 이체
은행 이체 의 임무 설명 은 매우 간단 합 니 다.만약 에 두 명의 사용자 가 있다 고 가정 하면 현재 사용자 A 가 사용자 B 에 게 100 위안 을 이체 합 니 다.이 Actor 모델 은 어떻게 디자인 해 야 합 니까?
사용자 A 와 사용자 B 는 분명히 두 개의 Actor 이지 만 저 희 는 사용자 A Actor 와 사용자 B Actor 를 제어 할 수 있 는 Actor 가 필요 합 니 다.저 희 는 이체 관리자 Actor 라 고 부 릅 니 다.그럼 흐름 도 는 다음 과 같 습 니 다.

계좌 이체 수요 가 오 면 액 터 집사 가 사용자 A 액 터 에 게 100 원 공제 메 시 지 를 먼저 보 내 고,공제 성공 메 시 지 를 받 은 뒤 사용자 B 액 터 에 게 메 시 지 를 보 내 100 원 을 추가 하 라 는 메 시 지 를 보 내 는 모습 을 볼 수 있다.
모든 것 이 아름 다 워 보이 지만 이 안에 문제 가 있 습 니 다.바로 사용자 A Actor 가 돈 을 공제 하 는 동안 사용자 B Actor 는 제한 을 받 지 않 습 니 다.이때 사용자 B Actor 를 조작 하 는 것 은 합 법 적 입 니 다!이런 상황 에 대해 단순 한 Actor 모델 은 비교적 무기력 해 보이 기 때문에 다른 메커니즘 을 넣 어 일치 성 을 확보 해 야 한다.
이 를 보면 액 터 모델 은 만능 이 아니 라 단점 이 있다 는 것 을 알 수 있다.그것 은 일치 성에 대한 요구 가 비교적 강 한 장면 이 비교적 무기력 하 다 는 것 이다.
3.왜 Actor 모델 이 나 왔 을 까
다음은 왜 Actor 모델 같은 병렬 프로 그래 밍 모델 이 나 타 났 는 지 이야기 해 보 자.
우 리 는 먼저 동시성 중의 일치 성과 격 리 성 을 말 해 야 한다.
일치 성 은 바로 데 이 터 를 일치 시 키 는 것 이다.예 를 들 어 은행 이체 사례 에서 사용자 A 가 사용자 에 게 B 100 위안 을 전달 하고 다른 간섭 이 없 는 상황 에서 이체 가 완 료 될 때 이다.이용자 A 의 계 정 은 100 원 감소 할 수 밖 에 없고,이용자 B 의 계 정 은 100 원 증가 할 수 밖 에 없다 는 점 에서 일치 성 을 충족 했다.가입자 A 가 50 감소 하거나 가입자 B 가 200 증가 했다 고 할 수 는 없다.
격 리 성 은 일부 일치 성 수 요 를 희생 하고 성능 을 향상 시 키 는 것 으로 이해 할 수 있다.예 를 들 어 완전히 일치 하 는 상황 에서 임 무 는 모두 직렬 이 고 이때 도 격 리 성 이 존재 하지 않 는 다.
그 걸 알 게 되면 왜 Actor 모델 이 생 겼 는 지.
전통 적 인 병발 모드 에서 공유 메모 리 는 강 일치 성 이 약 하고 격 리 성 이 약 한 경향 이 있다.예 를 들 어 비관 적 인 자물쇠/동기 화 방식 은 강 한 일치 성 을 가 진 방식 으로 병행 을 통제 하 는 것 이다.한편,Actor 모델 은 천연 적 으로 강 한 격 리 성과 약 한 일치 성 이기 때문에 Actor 모델 은 병발 에서 좋 은 성능 을 가지 고 통제 와 관리 가 쉽다.
이렇게 하면 Actor 모델 이 어떤 병행 장면 에 적합 한 지 알 수 있다.일치 성에 대한 수요 가 높 지 않 은 상황 에서 성능 에 대한 수요 가 비교적 높 을 때 Actor 모델 은 시도 해 볼 만 한 방안 이다.
이상 은 JAVA Actor 모델 의 일치 성과 격 리 성에 대한 상세 한 내용 입 니 다.JAVA Actor 모델 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 해 주 십시오!

좋은 웹페이지 즐겨찾기