<aside> 💡 좋은 글을 발견해서 일단 거의 가져다 쓰기만 합니다. 글을 다듬기만 하였으니 원본은 레퍼런스에 참조 부탁드립니다

</aside>

멀티스레딩 프로그래을 다른 구분으로 나누면 Computed-Bounded 스레드와 IO-Bounded 스레드로 나뉠 수 있습니다.

Computed-Bounded 스레드

IO-Bounded 스레드

예를 들어 파일 내용을 읽어오는 작업을 스레드를 만들어서 한다면, 당연히 백그라운드 스레드에서 돌게 하므로, 메인 스레드에서는 다른 작업을 수행 할 수 있으므로, 아주 효과적인 프로그램을 만들 수 있습니다. 여기까지는 IO-Bound 스레드입니다.

다음으로 비동기 IO 방식으로 작업을 수행한다면 이렇게 됩니다.

  1. 백그라운드 스레드를 생성합니다.
  2. 비동기 IO 명령을 통해 읽기를 요청합니다. -> 비동기결과를 받기 위한 토큰을 받던가 (APM), 완료이벤트를 받던가(EAP)
  3. 스레드가 죽습니다.
  4. 완료되었음을 통지 받습니다. (토큰 또는 이벤트로) ⇒ 새로운 스레드가 만들어집니다.
  5. 실제 Data를 읽습니다.
  6. 스레드를 종료합니다.

자 여기서 비동기 IO 방식이 IO-Bounded 멀티스레드와 다른 점은

  1. 전체 작업이 이루어질 동안 스레드가 살아있느냐
  2. 실제 작업할 때, 스레드가 살아있느냐의 차이입니다.

그럼 이게 뭐가 문제일까요?