Reactive Programming - Blocking is not efficient

this-is-spear·2023년 3월 18일
0

문서의 내용이 많아 분리해서 관리하고 있습니다. 전체 내용은 링크를 통해서 확인할 수 있습니다.

Blocking은 리소스를 남용한다.

Blocking 은 자원을 점유한 상태로 멈추면서 처리량을 떨어뜨리는 효율적이지 못한 상황을 말한다. Reactive Programming은 Non-blocking하게 작업을 진행해 서버 자원을 효율적으로 사용하고 있다.

1. 우리는 한계에 자주 부딪힌다.

하드웨어의 기능이 지속적으로 개선되지만, 처리할 수 있는 동시 사용자 수 까지 빠르게 도달하기 때문에 성능은 현재까지도 주요 관심사로 볼 수 있다.

2. 향상시킬 수 있는 방법은 다음과 같다.

일반적으로 프로그램의 성능을 향상시킬 수 있는 두 가지 방법이 있다. (1) 많은 자원을 이용하거나 스레드를 이용해 병렬로 처리하거나 (2) 가지고 있는 리소스를 효율적으로 사용하는 방법이다.

  • arallelize to use more threads and more hardware resources.
  • seek more efficiency in how current resources are used.

3. Blocking 코드도 나쁘지 않다. 병목 현상이 발생하기 전까지는.

일반적으로 Java 개발자는 차단 코드를 사용하여 프로그램을 작성하게 되는데, Blocking Code가 있는 상태에서 리소스 사용률을 높이게 되면 경합동시성 문제가 발생한다.

4. Blocking은 리소스를 낭비한다.

프로그램은 데이터베이스 요청 또는 네트워크 호출과 같은 I/O로 인해 지연이 발생하는데, 이 때 많은 스레드가 데이터를 기다리며 유휴 상태가 되며 리소스를 낭비하게 된다.

5. 병렬화는 한계가 있다.

하드웨어의 최대치의 리소스를 사용해야 하고, 리소스 낭비를 추론하는 것이 어렵기 때문에 병렬화는 한계가 있다.

즉, Blocking 되는 상태에서 리소스를 늘려 병렬 처리하는 데에는 한계가 있으니 리소스를 효율적으로 사용하는 방법을 파악해야 한다.

profile
익숙함을 경계하자

0개의 댓글