Sync/Async, Blocking/Non-Blocking

HelloSesang·2023년 3월 31일
0

1. 동기 vs 비동기

  1. 구분 기준
    • 함수 호출의 결과값에 대한 관심과 즉각적인 처리 여부가 동기와 비동기를 구분하는 기준
  2. 동기와 비동기 비교
    • 동기
      • 함수A가 함수B를 호출했을 때 함수B의 결과값이 언제 나오는지 계속 체크하다가 결과가 나오면 즉각적으로 그에 대한 처리를 하는 동작 방식
    • 비동기
      • 함수A가 함수B를 호출한 후 함수B의 결과값이 어떻게 되든 관심을 갖지 않는 동작 방식

2. 블로킹 vs 논블로킹

  1. 구분 기준
    • 함수 호출 이후 호출된 함수가 끝날 때까지 제어권을 붙잡고 있는지 여부가 구분의 기준
  2. 블로킹과 논블로킹 비교
    • 블로킹
      • 함수A가 함수B를 호출했을 때 함수B가 작업을 마무리할 때까지 제어권을 계속 가짐으로써 함수A는 아무것도 못하고 기다려야하는 동작 방식
    • 논블로킹
      • 함수A가 함수B를 호출했을 때 함수B가 작업 마무리 전에 제어권을 함수A에게 다시 돌려줘서 함수A가 다른 작업을 할 수 있는 동작 방식

3. 동기/비동기, 블로킹/논블로킹 조합

  1. 동기 + 블로킹
    • 일반적인 프로그램 동작 방식
  2. 동기 + 논블로킹
    • 프로그램 설치 도중 몇 퍼센트 진행됐는지 진행상황을 보여주는 것과 같은 상황에 적합한 동작 방식
  3. 비동기 + 블로킹
    • 비효율적이고 의미없는 동작 방식, 코딩을 잘못한 것
  4. 비동기 + 논블로킹
    • 처리하는데 긴 시간이 걸리는 IO 작업에 Application이 Block되지 않고 계속 동작할 수 있도록 함으로써 성능상 이점을 가질 수 있는 동작 방식
  • 추가내용
    • 시퀀스 다이어그램에서 async + non-blocking 방식은 task queue와 event loop를 활용한 동작 방식으로 그린 것인데 이와 다른 방법으로 async + non-blocking 방식이 동작하도록 설계된 것도 있다는 것 같으니 관심이 있으면 검색해보면 좋을 것 같다.
    • kernel도 하나의 프로그램이므로 Application의 스레드가 붙어서 작업을 수행하지 않아도 자체적으로 IO 작업을 수행하고 그 결과를 반환해줄 수 있다.
    • 싱글 스레드 환경인지 멀티 스레드 환경인지에 따라 동작 방식이 시퀀스 다이어그램과 달라질 수 있을 것 같다.
profile
개인 기록용 블로그입니다. 잘못된 정보가 있거나 내용 이해가 어려운 경우 댓글로 알려주시면 감사하겠습니다 :)

0개의 댓글