Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
concurrency_and_parallelism [2021/04/09 09:25] – tag 추가 ledyxconcurrency_and_parallelism [2022/10/28 16:00] (current) – [Scale Cube] U → Y 오타 수정 ledyx
Line 37: Line 37:
   * X axis scailing : 복제. 서버 앞에 Load Balencer를 설정하여 Traffic 분산, 높은 가용성 제공. Monolithic system에서 많이 사용하는 스케일링 방법.   * X axis scailing : 복제. 서버 앞에 Load Balencer를 설정하여 Traffic 분산, 높은 가용성 제공. Monolithic system에서 많이 사용하는 스케일링 방법.
     * 단점 : 기능 수정시 전체 애플리케이션을 새로 배포해야 한다. 그리고 자체적인 스케일링 프로파일을 가질 수 없음. (처리량에 따라 가변적일 수 없음.) 그렇기에 자원(CPU, RAM)은 다다익선이어야 함.     * 단점 : 기능 수정시 전체 애플리케이션을 새로 배포해야 한다. 그리고 자체적인 스케일링 프로파일을 가질 수 없음. (처리량에 따라 가변적일 수 없음.) 그렇기에 자원(CPU, RAM)은 다다익선이어야 함.
-  * axis scailing : 분할. 기능별로 애플리케이션 배포.+  * axis scailing : 분할. 기능별로 애플리케이션 배포.
     * 단점 : 잘못된 MSA 선택은 복잡도 증가.     * 단점 : 잘못된 MSA 선택은 복잡도 증가.
   * Z axis scailing : 복제 + 분할. 같은 서비스 컴포넌트를 모든 서버에 복제하지만, 각 서버는 **일부 데이터만**을 다룬다. 일반적으로 **Sharding**으로 알려짐. 대표적인 예시가 In-memory caching (like Redis)   * Z axis scailing : 복제 + 분할. 같은 서비스 컴포넌트를 모든 서버에 복제하지만, 각 서버는 **일부 데이터만**을 다룬다. 일반적으로 **Sharding**으로 알려짐. 대표적인 예시가 In-memory caching (like Redis)
Line 46: Line 46:
  
 === Java === === Java ===
 +
 +  * Runnable : return 값이 없음
 +  * Callable<T> : return 값이 있음. Future와 함께 사용. 
 +
 +==== Executor ====
 +
 +https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/package-summary.html
 +
 +  * void execute(Runnable command)
 +
 +===== ExecutorService =====
 +
 +https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html
 +
 +  * <T> Future<T>  submit(Callable<T> task)
 +  * Future<?> submit(Runnable task)
 +  * <T> Future<T> submit(Runnable task, T result)
 +
 +====== ScheduledExecutorService ======
 +
 +https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/package-summary.html
 +
 +====== ForkJoinPool ======
 +
 +https://docs.oracle.com/javase/8/docs/api/index.html?java/util/concurrent/package-summary.html
 +
 +Fork/Join 작업을 수행하는 Thread Pool. workstealing 알고리즘 사용하여 유휴 Task를 훔쳐와서 작업.
 +
 +구현해야 하는 Task는 두 가지. 두 클래스 모두 Future 의 자식.
 +
 +  * [[https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RecursiveTask.html|RecursiveTask<T>]] : T compute() 구현 필요. T를 return.
 +  * [[https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/RecursiveAction.html|RecursiveAction]] : return 값 없음. 즉, Join 작업 필요 없음.
 +
 +
 +
 +==== Future ====
 +
 +https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Future.html
 +
 +작업 완료 여부를 확인, 대기, 조회
 +
 +===== CompletableFuture =====
 +
 +https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CompletableFuture.html
 +
 +Future의 조합(상호 연동)이 필요할 때 사용
  
  
 === Scala === === Scala ===
  
 +==== Futures and Promises ====
 +
 +https://docs.scala-lang.org/overviews/core/futures.html
  
 == 용어 == == 용어 ==
concurrency_and_parallelism.1617956741.txt.gz · Last modified: 2021/04/09 09:25 by ledyx