002 Parallel Concurrent

강의 메모 - Parallel & Concurrent #

동시성 #

특정한 순서 없이 겹치는 기간에 시작, 실행 및 완료되는 여러 작업에 관한것 ex) 사람이 있다. 작업1, 작업2가 있다. 이 사람은 작업1, 작업2를 모두 해야한다. 작업1을 하고 작업2를 하는데, 시간적으로 동시에하는건 아니고 계속 번갈아가면서 한다. 이게 짧은 찰나로 번갈아가면서 하기 때문에 동시에 하는것처럼 보인다. (순차적이지 않다. 순서가 없다.) (시간적인 동시성이 아님)

  • 작업의 갯수 > CPU 갯수
  • Thread1, Thread2가 번갈아가면서 Task를 수행
  • 빠른게 목적이 아닌, CPU의 효율적인 사용이 목적이다.
  • 스레드가 작업을 처리할때 I/O 블록(이미지 삽입, 파일 읽기, DB 조회 등)에 걸렸을 경우 CPU 자체가 관여하지 않고 별도의 I/O 컨트롤러가 관여함
    • I/O 블록에 걸린 스레드를 대기시키고 다른 쓰레드를 CPU가 점유하여 작업한다. (효율성 상승)

병렬성 #

멀티 코어 프로세서에서 동시에 실행되는 동일한 작업의 여러 작업에 관한 것 ex) 사람이 2명 있다. 작업 1은 사람A가, 작업 2는 사람B가 수행한다. 이를 동시에 수행한다. (시간적으로도 동시가 맞다.) 동일한 시간에! 동시에 수행하는것 (시간적인 동시성임)

  • CPU가 동시에 많은 일을 수행, 최대한 바쁘게 동작해야함
  • CPU >= 작업갯수
  • 1개의 코어에서는 절대 병렬성을 구현할 수 없다.
  • 동시성이 작업 처리 방식에 대한 설계에 관한것이라면, 병렬성은 하드웨어에서 계층에서 작업 수행 방식에 관한것이다.

병렬성과 동시성 조합 #

ThreadPoolExecutor

  • 병렬성으로 처리 성능을 극대화하고 동시성으로 CPU 자원을 효율적으로 운용한다.

병렬성(Parallelism - Divide and COnquer) #

ForkJoinPool

  • 하나의 Task를 서브 태스크로 분할하여 병렬처리함으로써 전체 작업 성능을 높인다.