자바 비동기 프로 그래 밍 최 적 실천

5614 단어 자바비동기
최근 비동기 프로 그래 밍 이 매우 유행 하고 있 는데,주로 다 핵 시스템 에서 삼투 율 을 높 일 수 있다 는 것 이다.비동기 프로 그래 밍 은 UI 에 대한 빠 른 응답 을 높 일 수 있 는 프로 그래 밍 방식 이다.자바 의 비동기 프로 그래 밍 모델 은 일치 하 는 프로 그래 밍 모델 을 제공 하여 프로그램 에서 비동기 를 지원 할 수 있 습 니 다.본 고 는 자바 를 사용 하여 비동기 작업 을 수행 할 때 지 켜 야 할 가장 좋 은 실천 을 토론 하 였 다.
자바 와 비동기 프로 그래 밍 의 모범 사례
비동기 가 무엇 입 니까?이 걸 왜 써 요?
비동기 프로 그래 밍 은 막 히 지 않 고 이벤트 구동 프로 그래 밍 모델 을 제공 합 니 다.이 프로 그래 밍 모델 은 시스템 의 다 핵 수행 임 무 를 이용 하여 병행 을 제공 하기 때문에 응용 삼투 율 을 제공 합 니 다.이곳 의 삼투 율 은 단위 시간 내 에 하 는 임무 의 수량 을 가리킨다.이러한 프로 그래 밍 방식 에서 한 작업 부 서 는 주 응용 스 레 드 에 독립 하여 실 행 될 것 이 며,상태 알림 을 스 레 드 로 호출 할 것 입 니 다.성공,처리 중 또는 실패 할 것 입 니 다.
우 리 는 차단 모델 을 없 애기 위해 비동기 가 필요 하 다.사실 비동기 프로 그래 밍 모델 은 같은 스 레 드 로 여러 요청 을 처리 할 수 있 습 니 다.이 요청 들 은 이 스 레 드 를 막 지 않 습 니 다.응용 프로그램 이 사용 하고 있 는 스 레 드 가 작업 을 수행 하고 있다 고 상상 하고 작업 이 끝 날 때 까지 기 다 려 야 다음 단 계 를 진행 할 수 있 습 니 다.log 프레임 워 크 는 좋 은 예 입 니 다.전형 적 으로 파일,데이터 베이스 또는 다른 유사 한 곳 에 이상 과 오류 로 그 를 기록 하고 싶 습 니 다.로 그 를 다 쓸 때 까지 프로그램 을 기다 리 게 하지 않 을 것 입 니 다.그렇지 않 으 면 프로그램의 응답 이 영향 을 받 을 것 입 니 다.반면 로그 프레임 워 크 에 대한 호출 이 비동기 적 이 라면 기다 리 지 않 고 다른 작업 을 병행 할 수 있 습 니 다.이것 은 비 차단 실행 의 예 이다.
자바 에서 이 보 를 실현 하기 위해 서 는FutureFutureTask를 사용 해 야 합 니 다.java.util.concurrent가방 아래 에 있 습 니 다.Future는 인터페이스 이 고FutureTask는 실현 류 입 니 다.실제로 코드 에Future를 사용 하면 비동기 임 무 를 즉시 수행 하고 스 레 드 를 호출 하면 결 과 를 얻 을 수 있 습 니 다promise.
아래 코드 세 션 은 두 가지 방법 을 포함 하 는 인 터 페 이 스 를 정의 합 니 다.하 나 는 동기 화 방법 이 고,다른 하 나 는 비동기 방법 이다.
     
      
      
      
      
1
2
3
4
5
6
7
     
      
      
      
      
import java.util.concurrent.Future;
public interface IDataManager {
// synchronous method
public String getDataSynchronously();
// asynchronous method
public Future<String> getDataAsynchronously();
}

주의해 야 할 것 은 리 셋 모델 의 단점 은 리 셋 이 끼 워 질 때 매우 번 거 로 운 것 이다.
해 야 할 것 과 하지 말 아야 할 것
테스트 를 편리 하 게 하기 위해 서,너 는 코드 에서 기능 을 다 중 스 레 드 에서 분리 해 야 한다.자바 에서 비동기 코드 를 작성 할 때 비동기 모델 을 따라 야 합 니 다.그러면 호출 스 레 드 가 막 히 지 않 습 니 다.구조 함수 가 비동기 가 될 수 없 음 을 주의 하 세 요.구조 함수 에서 비동기 방법 을 호출 해 서 는 안 됩 니 다.임무 가 서로 의존 하지 않 을 때 비동기 방식 은 특히 유용 하 다.호출 작업 이 호출 된 작업 에 의존 할 때 이 보 를 사용 해 서 는 안 됩 니 다.
비동기 적 인 방법 에서 이상 을 처리 해 야 합 니 다.장시간 의 task 에 이상 을 실현 해 서 는 안 됩 니 다.장시간 실행 되 는 작업 이 비동기 적 으로 실행 되면 동기 적 으로 실행 하 는 것 보다 더 오래 걸 릴 수 있 습 니 다.실행 할 때 비동기 적 으로 실행 되 는 방법 으로 스 레 드 컨 텍스트 전환 을 실행 해 야 하기 때 문 입 니 다.스 레 드 상태의 저장 소 등.동기 화 이상 과 비동기 의 이상 이 다 르 기 때문에 주의해 야 합 니 다.동기 이상 암시 프로그램 이 그 프로그램의 특수 상태 로 실 행 될 때마다 이상 을 던 집 니 다.비동기 이상 의 추적 은 매우 어렵다.따라서 동기 화 와 비동기 이상 암시 동기 화 또는 비동기 코드 가 이상 을 던 질 수 있 습 니 다(synchronous and asynchronous exceptions imply synchronous or asynchronous code in your program that might raise exceptions.).
추천
  • https://msdn.microsoft.com/en-us/magazine/dn818494.aspx
  • http://docs.oracle.com/javaee/6/tutorial/doc/gkiez.html
  • https://technology.amis.nl/2009/02/19/asynchronous-processing-in-java-applications-leveraging-those-multi-cores/
  • http://javarevisited.blogspot.in/2015/01/how-to-use-future-and-futuretask-in-Java.html
  • http://www.codeproject.com/Articles/562021/Asynchronous-models-and-patterns

  • 총결산
    비동기 화 는 디자인 의 대규모 빠 른 응답 에 대한 응용 이 매우 중요 하 다.비동기 반전 모델 은 많은 장점 을 가 져 왔 다.비 싼 I/O 작업 을 수행 하기 위해 서 는 비동기 반전 방법 에 의존 할 수 있 으 며,프로세서 가 다른 작업 을 수행 할 수 있 습 니 다.그러나 자바 와 C\#에서 비동기 적 인 지원 을 제 공 했 지만 비동기 프로 그래 밍 은 항상 쉽게 이 루어 지지 않 았 다.비동기 방식 의 사용 은 신중 해 야 한다.언제 사용 할 수 있 는 지,언제 사용 하지 말 아야 하 는 지 알 아야 한다.
    본 고 에서 우 리 는 비동기 프로 그래 밍 의 개념 과 자바 프로 그래 밍 을 사용 하려 면 어떻게 실현 해 야 하 는 지 를 소개 했다.본 고 는 비동기 프로 그래 밍 을 사용 하 는 가장 좋 은 실천 도 보 여 주 었 다.읽 어 주 셔 서 감사합니다.
    번역자 증가 내용
    자바 7 에 서 는 포크/Join 프레임 워 크 를 제공 합 니 다.큰 task 를 병행 할 수 있 는 작은 task 로 나 눌 수 있 습 니 다.자바 8 에서 parallelStream 내 부 는 포크/Join 을 이용 하여 병행 작업 을 수행 합 니 다.Reactive Extensions for.NET 은 비동기 및 이벤트 프로 그래 밍 프레임 워 크 를 제공 합 니 다.자바 에 대응 하 는 것 은 넷 플 릭 스 의 RxJava 입 니 다.이 를 사용 하여 CQRS 와 Event Sourcing 모드 를 실현 할 수 있 습 니 다.Akka 는 분포 식,잘못 사용 되 는,이벤트 구동 프레임 워 크 를 제공 하여 비동기 적 인 분포 식 프로 그래 밍 을 실현 할 수 있 습 니 다.그리고 Spring 의 reactor 도 고성능 이벤트 구동 의 비동기 프레임 워 크 를 제공 합 니 다.Node.js 는 천성적으로 비동기 프로 그래 밍 모드 를 지원 합 니 다.예 를 들 어 golang 은 goroutines 와 channels 를 사용 합 니 다.비동기 프로 그래 밍 도 쉽게 이 루어 집 니 다.

    좋은 웹페이지 즐겨찾기