You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
비동기 통신에서는 callback 호출을 통해 계산 결과를 가져오는데, CompletableFuture은 완료 시점에 알려주지 않는다. (자동으로 결과를 알리는 매커니즘이 없다) -> thenApply, thenAccept, thenRun 등의 메서드를 사용하면 콜백 방식과 유사하게 비동기 작업 완료 시 후속 작업을 수행할 수 있다.
필요한 경우에 get() 메서드를 사용하여 호출 스레드에서 결과를 바로 가져올 수 있다.
but get() 메서드는 블로킹 처리를 사용하여 결과를 반환해야 한다. → 결과가 준비될 때까지 호출한 스레드는 멈춰있게 된다.
join() 메서드 또한 블로킹 처리를 사용한다.
비동기면서 논블로킹인 것이 항상 좋은지? -> 특정 상황에서는 get() 메서드를 사용하는 것이 유용하다.
"특정상황"?
문제가 무엇인가?
CompletableFuture은 항상 비동기적이면서 논블로킹일까?
왜 이런 문제를 선정하였는가?
CompletableFuture은 비동기적으로 실행되지만 항상 논블로킹임을 보장할 수 없다는 의미에 대해 더 자세히 알아보기 위해
자신이 생각한 답변은 무엇인가?
동기 vs 비동기 vs 블로킹 vs 논블로킹
관점을 어떻게 두느냐에 따라 다르다.
Blocking / Non-blocking : 호출된 함수가 호출한 함수에게 제어권을 바로 주느냐 안주느냐
Sync / Async : 호출된 함수의 종료를 호출한 함수가 처리하느냐, 호출된 함수가 처리하느냐
블로킹 : 함수 A → B로 호출할때, B 함수가 자신이 종료되기 전까지 A함수에게 제어권을 돌려주지 않는 것 (호출하면 제어권이 B로 넘어감)
논 블로킹 : 함수 A → B로 호출할때, B 함수가 바로 A 함수에게 제어권을 넘겨주면서, A 함수가 다른 일을 할 수 있도록 하는 것
동기 : 함수 A → B 로 호출할때, B 함수의 결과를 A 함수가 처리하는 것
비동기적 : 함수 A → B 함수를 호출할 때, B 함수의 결과를 B 함수가 처리하는 것 (callback)
출처 : https://jh-7.tistory.com/25
get() 메서드를 호출하면 작업이 완료될 때까지 현재 스레드가 블록되어서 비동기성을 잃는다. → CompletableFuture은 더 유연하고 강력한 비동기 프로그래밍 지원
CompletableFuture 기본적인 동작방식
CompletableFuture
는 기본적으로 비동기 작업을 수행하기 위해ForkJoinPool
과 같은 스레드 풀을 사용한다.CompletableFuture는 비동기 작업을 수행하기 위해 사용되지만, Future에 구현되어있는 get() 함수를 사용하여 여전히 현재 스레드를 블로킹할 수 있다.
→ 항상 논블로킹임을 보장할 수 없다.
비동기 통신에서는 callback 호출을 통해 계산 결과를 가져오는데, CompletableFuture은 완료 시점에 알려주지 않는다. (자동으로 결과를 알리는 매커니즘이 없다) -> thenApply, thenAccept, thenRun 등의 메서드를 사용하면 콜백 방식과 유사하게 비동기 작업 완료 시 후속 작업을 수행할 수 있다.
필요한 경우에 get() 메서드를 사용하여 호출 스레드에서 결과를 바로 가져올 수 있다.
but get() 메서드는 블로킹 처리를 사용하여 결과를 반환해야 한다. → 결과가 준비될 때까지 호출한 스레드는 멈춰있게 된다.
join() 메서드 또한 블로킹 처리를 사용한다.
비동기면서 논블로킹인 것이 항상 좋은지? -> 특정 상황에서는 get() 메서드를 사용하는 것이 유용하다.
"특정상황"?
https://www.baeldung.com/java-completablefuture-non-blocking
The text was updated successfully, but these errors were encountered: