동기(Synchronous) vs 비동기(Asynchronous), 블로킹(Blocking) vs 논블로킹(Non-Blocking)

minisoo·2023년 6월 18일
0
post-thumbnail

동기(Synchronous) vs 비동기(Asynchronous)

  • 동기/비동기는 작업을 실행하는 여러개의 함수들이 순차적으로 처리하느냐 아니냐의 차이로, 동기는 작업의 순서가 지켜지는 것, 비동기는 순서가 지켜지지 않을 수 있는 것이다. 여기서 작업을 순서대로 처리한다는건 이전작업에 대한 완료 알림을 반드시 받아야 다음 작업을 수행한다는 말이다.
  • 동기는 또 다른 관점에서는, 제어권과 결과값을 동시에 반환하는 것을 말하기도 한다.
    • 제어권은 함수의 코드나 프로세스의 실행 흐름을 제어할 수 있는 권리
  • 동기는 요청자가 요청받은 함수의 작업이 완료되었는지 계속 확인하고, 비동기는 요청자는 요청 후 신경쓰지않고 있다가 요청받은 함수가 작업을 마치면 알려주게 된다.

동기,비동기에 대해 이야기할 때 항상 성능이야기가 같이 나오게 된다.

비동기방식으로 처리하게 되면 한 작업이 끝날때까지 기다리지 않고 다른 작업을 동시에 멀티로 처리하기 때문에 전반적인 시스템 성능 향상에 도움을 준다

동기/비동기 성능비교
이 글은 비동기 서버는 동기 서버보다 성능이 약간 뛰어나지만, 동기 서버가 코드 작성 및 디버깅이 쉬웠다. 비동기 서버는 코드의 복잡성이라는 단점이 있기때문에 메모리 사용에 대해 걱정하지 않는다면 동기 방식을 채택해도 좋다라는 결론이다.

블로킹(Blocking) vs 논블로킹(Non-Blocking)

  • 다른 요청의 작업을 처리하기 위해 현재 작업을 block 하는가, 하지 않는가의 유무를 나타내는 프로세스의 실행 방식
  • 블로킹
    • 다른 함수를 호출할 때, 제어권도 함께 넘겨줌
    • 요청한 작업이 끝날 때까지 다른 작업을 하지 않고 기다림
    • 제어권이 없는 상태라 아무것도 못함
  • 논블로킹
    • 다른 함수를 호출할 때, 제어권을 넘겨주기는 하지만 바로 돌려받음
    • 요청한 작업이 수행되는 동안 다른 작업을 할 수 있음

조합

📍 블로킹 + 동기

요청받은 함수의 작업이 끝나야 제어권 돌려받음 + 요청자는 결과가 나올때까지 계속 확인

  • 함수 1: 함수 2 호출
  • 함수 2: 실행 중
  • 함수 1: 함수 2 끝나는 거 기다림
  • 함수 2: 실행 중
  • 함수 1: 지켜보다가 끝난거 체크

📍 블로킹 + 비동기

요청받은 함수의 작업이 끝나야 제어권 돌려받음 + 결과는 요청받은 함수가 알려줌

  • 함수 1: 함수 2 호출
  • 함수 2: 실행 중
  • 함수 1: 함수 2 끝나는 거 기다림
  • 함수 2: 실행 중
  • 함수 2: 끝나면 함수 1에 알림

📍 논블로킹 + 동기

제어권은 바로 돌려줌 + 요청자는 결과가 나올때까지 계속 확인

  • 함수 1: 함수 2 호출
  • 함수 2: 실행 중
  • 함수 1: 다른거 하다가 함수 2 끝났는지 체크
  • 함수 2: 실행 중
  • 함수 1: 다른거 하다가 함수 2 끝났는지 체크
  • 함수 2: 끝나고 반환

📍 논블로킹 + 비동기

제어권은 바로 돌려줌 + 결과는 요청받은 함수가 알아서 알려줌

  • 함수 1: 함수 2 호출
  • 함수 2: 실행 중
  • 함수 1: 다른 작업 중
  • 함수 2: 끝나고 반환

[참고자료]
https://notes.arkalim.org/notes/programming/asynchronous%20programming/
https://joooing.tistory.com/entry/%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9
https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC#sync_non-blocking_%EC%A1%B0%ED%95%A9

profile
코딩하는 돌멩이 👻

0개의 댓글