This shows you the differences between two versions of the page.
| Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
| concurrency_and_parallelism [2021/04/08 14:06] – back pressure ledyx | concurrency_and_parallelism [2022/10/28 15:00] (current) – [Scale Cube] U → Y 오타 수정 ledyx | ||
|---|---|---|---|
| Line 1: | Line 1: | ||
| = Concurrency and Parallelism = | = Concurrency and Parallelism = | ||
| + | |||
| + | {{tag> | ||
| == 기본 개념 == | == 기본 개념 == | ||
| + | * Concurrency : 싱글 코어에서 소프트웨어(논리적인) 기법으로 여러 작업(Task, | ||
| - | * Parallelism | + | * Parallelism |
| - | * Data Parallelism | + | * Data Parallelism |
| - | * Task Parallelism | + | * Task Parallelism |
| Line 21: | Line 24: | ||
| * pull mode : " | * pull mode : " | ||
| + | |||
| + | == Scale Cube == | ||
| + | |||
| + | https:// | ||
| + | |||
| + | [[https:// | ||
| + | |||
| + | |||
| + | {{https:// | ||
| + | |||
| + | |||
| + | * X axis scailing : 복제. 서버 앞에 Load Balencer를 설정하여 Traffic 분산, 높은 가용성 제공. Monolithic system에서 많이 사용하는 스케일링 방법. | ||
| + | * 단점 : 기능 수정시 전체 애플리케이션을 새로 배포해야 한다. 그리고 자체적인 스케일링 프로파일을 가질 수 없음. (처리량에 따라 가변적일 수 없음.) 그렇기에 자원(CPU, RAM)은 다다익선이어야 함. | ||
| + | * Y axis scailing : 분할. 기능별로 애플리케이션 배포. | ||
| + | * 단점 : 잘못된 MSA 선택은 복잡도 증가. | ||
| + | * Z axis scailing : 복제 + 분할. 같은 서비스 컴포넌트를 모든 서버에 복제하지만, | ||
| + | |||
| == 활용 == | == 활용 == | ||
| Line 26: | Line 46: | ||
| === Java === | === Java === | ||
| + | |||
| + | * Runnable : return 값이 없음 | ||
| + | * Callable< | ||
| + | |||
| + | ==== Executor ==== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | * void execute(Runnable command) | ||
| + | |||
| + | ===== ExecutorService ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | * <T> Future< | ||
| + | * Future<?> | ||
| + | * <T> Future< | ||
| + | |||
| + | ====== ScheduledExecutorService ====== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | ====== ForkJoinPool ====== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Fork/Join 작업을 수행하는 Thread Pool. workstealing 알고리즘 사용하여 유휴 Task를 훔쳐와서 작업. | ||
| + | |||
| + | 구현해야 하는 Task는 두 가지. 두 클래스 모두 Future 의 자식. | ||
| + | |||
| + | * [[https:// | ||
| + | * [[https:// | ||
| + | |||
| + | |||
| + | |||
| + | ==== Future ==== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | 작업 완료 여부를 확인, 대기, 조회 | ||
| + | |||
| + | ===== CompletableFuture ===== | ||
| + | |||
| + | https:// | ||
| + | |||
| + | Future의 조합(상호 연동)이 필요할 때 사용 | ||
| === Scala === | === Scala === | ||
| + | ==== Futures and Promises ==== | ||
| + | |||
| + | https:// | ||
| == 용어 == | == 용어 == | ||