SSAFY-Book-Study / modern-java-in-action

모던 자바 인 액션 북스터디입니다.
1 stars 10 forks source link

2 Weeks - 병렬연산과 cpu 코어, 블록킹/논블록킹 #34

Open devjy39 opened 1 year ago

devjy39 commented 1 year ago

문제

  1. 스트림의 병렬연산은 코어가 1개인 cpu에서 어떻게 동작할까?
  2. RecursiveTask에서 Join과 compute를 동기/비동기, 블록킹/논블록킹에 대한 설명과 분류를 해주세요.

contents - 세부 내용

참고

leetaggg commented 1 year ago

1. 스트림의 병렬연산은 코어가 1개인 cpu에서 어떻게 동작할까?

병렬 처리는 작업을 나누고 나눈 작업들을 스레드에 할당하는데 단일 코어의 경우 스레드가 1개만 생성 되어 작업을 수행합니다. 이는 순차 처리처럼 이루어지지만, 작업을 나누고 나눈 작업들을 할당하는 동작을 수행하며 오버헤드가 발생하므로, 순차 스트림에 비해 비효율적으로 처리됩니다.

2. RecursiveTask에서 Join과 compute를 동기/비동기, 블록킹/논블록킹에 대한 설명과 분류를 해주세요.

동기/비동기와 블록킹/논블록킹의 차이는 작업 수행 방식의 관점 차이입니다 . 동기/비동기는 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점이고,블로킹/논블록킹은 단어 그대로 현재 작업이 차단되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점입니다. compute와 join의 경우 호출한 스레드가 다른 작업이 끝날 때까지 작업을 멈추고 기다려야 되므로 동기적이며 블록킹입니다.

[Is fork / join multithreaded?] [Breaking Down the Differences: Non-Blocking vs. Asynchronous Programming and When to Use Each]