• 갑이 코드 진행한다.
  • 동기적으로 안해도되는 메서드를 을 스레드에 던짐
  • 근데 을은 이거 바로 안주고 갑 기다리게함.

Sync Blocking 과 큰 차이 없다

보통 Async-blocking은 개발자가 비동기 논블록킹으로 처리 하려다가 실수하는 경우에 발생하거나, 자기도 모르게 블로킹 작업을 실행하는 의도치 않은 경우에 사용된다. 그래서 이 방식을 안티 패턴(anti-pattern)이라고 치부하기도 한다.

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
 
public class AsyncBlockingIOExample {
    public static void main(String[] args) throws Exception {
        ExecutorService executor = Executors.newSingleThreadExecutor();
 
        // 비동기적으로 작업 제출
        Future<String> futureResult = executor.submit(() -> {
            // 오래 걸리는 I/O 작업 시뮬레이션
            Thread.sleep(3000);
            return "작업 완료!";
        });
 
        System.out.println("작업 요청 완료, 다른 작업 수행...");
 
        // ... 다른 작업 수행 ...
 
        System.out.println("결과를 기다립니다...");
        // 결과를 기다리는 동안 스레드는 블로킹됨
        String result = futureResult.get();
        System.out.println("결과: " + result);
 
        executor.shutdown();
    }
}

그로킹 동시성

  • 리액터 패턴
  • ? 놀랍게도 비동기 블로킹 모델이지만, 입출력 연산은 논블로킹으로 동작
  • 그러나, 바쁜 대기 방식이 아닌 특별한 블로킹 시스템 콜인 select사용해서 입출력 연산 상태를 통지 받음.
  • 그러므로 블로킹이 일어나는 부분은 입출력 연산 호출이 아니라 상태 통지 부분
  • 그러므로 통지 시스템의 신뢰성과 성능이 확보만됨다면 매우 뛰어난 입출력 선은 보일수있는 모델!