Sync/Async 통신

코난·2023년 12월 22일
0

CS 면접 정리

목록 보기
21/67

동기 통신 (Synchronous)

  • 동기란 task를 직렬적으로 수행하는 방식임
  • 요청과 그 결과가 동시에 일어난다는 약속
  • 요청(request)을 보내고 난 이후에 반드시 응답(response)을 받아야 다음 동작이 이루어짐
  • 요청과 응답의 순서 보장 가능
  • HTTP가 대표적인 동기방식 통신 프로토콜
  • 반드시 수행이 완료된 후에 다음 작업이 수행되므로 속도가 느리고 시스템의 전체 효율이 저하됨
  • 대신 설계가 매우 간단하고 직관적임(요청-결과 한 세트로 처리되기 때문)
  • 에러 처리가 쉬울 수 있음
  • 보통 전체 페이지 다시 로딩

비동기 통신 (Asynchronous)

  • 직렬적 수행이 아닌 병렬적 수행 방식
  • 요청과 그 결과가 동시에 일어나지 않을거라는 약속
  • 요청(request)을 보낸 후 응답(response)의 여부와 상관없이 다음 작업이 동작
  • 요청과 응답의 순서 보장 불가능
  • 작업이 수행되는 동안 다른 작업이 수행될 수 있으므로 자원을 효율적으로 사용할 수 있음(동시성)
  • 비동기 요청시 응답 후에 처리될 콜백 함수 같이 알려줌
  • 작업 완료 시 콜백 함수 호출됨
  • 처리 로직이 동기보다 복잡함
  • 에러 파악과 처리가 쉽지 않을 수 있음
  • 보통 전체 페이지를 다시 로딩하지 않고 필요 부분만 업데이트함

Socket 함수 간단 정리

  • listen() : 소켓의 연결을 위한 대기열 생성
  • accept() : 클라이언트 연결 수락
  • connect() : 생성한 소켓을 통해 서버로 접속 요청
  • write() : 파일에서 데이터를 출력
  • read() : 파일을 읽는 함수
  • socket() : 시스템과 시스템 간의 입구
  • fcntl : 파일 속성 변경, 컨트롤

Blocking Socket

  • 네트워크 통신 측면에서의 블로킹

  • 거래량이 적을때 문제 없다가 많아지면 시스템에 Block 현상이 일어남(멈춰있는 현상)

  • 대부분 소켓과 관련된 함수를 호출하는중에 발생하는 현상

  • 경우 1

    • 클라이언트의 connect()와 서버의 accept() 사이에서 내부적으로 3-way handshake가 일어나게 되는데 이때 클라이언트 측에서 ack를 주지 않으면 서버는 무한으로 기다리게 됨 (Blocking)
  • 경우 2

    • connect가 되어서 소켓이 붙었는데 클라언트측에서 write를 하지 않았거나 어떤 장애로 데이터가 넘어오지 않으면 서버는 무한으로 기다리게 됨(Blocking)
  • 해결 방법

    • Multi-Processing
      • 클라이언트 수만큼 서버의 프로세스 개수를 늘려놓는 것
    • Multi-Plexing
      • Multi-Processing을 사용하더라도 무한정으로 프로세스를 늘릴수는 없기 때문에 이러한 단점을 보완하고자 나왔으며, 하나의 프로세스에 여러 개의 소켓을 관리하는 방식을 말함
      • 하나의 프로세스가 여러개의 클라이언트를 관리함

Non-Blocking Socket

  • fcntl 함수를 통해 소켓을 Non-Blocking 상태로 만들 수 있음
  • 데이터 유무에 상관없이 read 해보고 업무 처리 가능함
  • 없으면 다시 read하고 있으면 바로 업무 1 처리함
  • EINTR : 데이터가 없다는 뜻

Sync/Async VS Blocking/Non-Blocking

  • 동기/비동기는 요청한 작업에 대해 완료 여부를 신경 써서 작업을 순차적으로 수행할지 아닌지에 대한 관점
    • 호출되는 함수의 작업 완료 여부를 신경쓰는지 여부에 따라 달라짐
  • 블로킹/논블록킹은 단어 그대로 현재 작업이 block(차단, 대기) 되느냐 아니냐에 따라 다른 작업을 수행할 수 있는지에 대한 관점
    • 제어권을 어떻게 처리하느냐에 따라 달라짐

참고

https://velog.io/@nittre/%EB%B8%94%EB%A1%9C%ED%82%B9-Vs.-%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EB%8F%99%EA%B8%B0-Vs.-%EB%B9%84%EB%8F%99%EA%B8%B0
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-%EB%B9%84%EB%8F%99%EA%B8%B0Async%ED%86%B5%EC%8B%A0-%EB%8F%99%EA%B8%B0Sync%ED%86%B5%EC%8B%A0
https://brunch.co.kr/@hyoi0303/22#comments
https://bada744.tistory.com/181
https://jindevelopetravel0919.tistory.com/87

profile
몸은 커졌어도, 머리는 그대로... 하지만 불가능을 모르는 명탐정 현아! 진실은 언제나 하나!

0개의 댓글