본문 바로가기

java/thread(동시성)5

API 호출 관점에서 WebClient 와 Coroutine 조합해보기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다.기존 WebClient 다시 보기이전 글에서 webclient를 활용해 api 통신을 했던 코드를 다시 한번 살펴보자. @GetMapping("/test/webclient/non-blocking/{sleep}") fun `webclient 기반 코드(non-blocking)`( @PathVariable("sleep") sleep: Long, ): ResponseEntity> { println("호출전: ${LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))}") val r.. 2024. 1. 30.
스레드 block 관점에서 Webflux Map vs Flatmap 비교 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다 서론 흔히들 webflux는 thread pool 기반의 모델과 달리 event loop 기반 모델을 사용하여 높은 처리량을 얻을 수 있다고 말한다. 위 말은 event loop 가 thread pool 기반의 모델보다 스레드를 더 효율적으로 사용한다는 것을 내포하고 있다. 즉 thread pool 기반의 모델은 io waiting 이 발생하면 thread 가 block 되는 반면, event loop 기반의 모델은 io waiting 이 발생하면 thread 가 block 되지 않고 다시 스레드풀에 반환되어 다른 처리를 할 수 있는 상태가 된다. 하지만 단순히 webflux 를 사용한다고 해서 무조건 threa.. 2023. 10. 2.
API 호출 관점에서 TaskExecutor & Coroutine & Webclient 비교해보기 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 기술에 대한 필요성 spring mvc 환경에선 하나의 요청당 하나의 스레드가 할당되어 요청을 처리하게 된다. 이는 기본적으로 모든 요청을 동기적(순차적)으로 처리한다는 의미이다. 모든 요청을 동기적으로 처리하는 방식은 인간이 가장 이해하기 쉬운 방식이기 때문에, 이 방식으로 시스템을 구성하고 코드를 작성하는 것은 코드에 대한 가독성과 유지보수성을 좋게 유지할 수 있는 선택지가 된다. 따라서 대부분의 상황에서 이 방식은 좋은 선택지가 된다.(심플이즈베스트..) 하지만 특정 상황에서 트레이드오프를 해야 할 수도 있다. 예를 들어 하나의 요청에서 처리해야 하는 작업이 외부 api를 10번 호출해야 하는 일이고, 각.. 2023. 9. 8.
비동기 & 논블러킹 의미 분석 사실이 아니라 공부한 내용과 생각을 정리한 글입니다. 언제든 가르침을 주신다면 감사하겠습니다. 1. 동기와 비동기 코드적으로 접근해야 하는 개념 특정 코드 블락이 다른 코드 블락의 완료 여부에 의존해서 실행될 때 동기적으로 실행된다고 표현 비동기를 구현하는 가장 흔한 방법으로, 특정 코드 블락이 실행되는 동안 다른 코드 블락을 실행하기 위해 별도의 스레드를 할당하여 두 코드 블락이 독립적으로 수행되도록 함 또는 call-back 을 사용 한계 외부 API 호출이나 DB 접근을 비 동기적으로 수행한다고 해 보자 별도의 스레드를 할당해 해당 작업을 수행하면 원래 작업을 하던 스레드는 블러킹 되지 않는다. 하지만, 별도로 할당한 스레드는 블러킹 되고 있다. 2. 논블러킹 스레드적으로 접근해야 하는 개념 스레드.. 2022. 8. 11.