동기 통신과 비동기 통신

2022. 7. 18. 21:46·Programming/Programming
728x90

동기 통신(Synchronous)

동기 통신(Synchronous)이란 request가 있으면 해당 response가 전달될 때까지 다른 request를 요청할 수 없는 통신 방법이다. 이 방법은 request에 대한 전달 결과가 중요한 서비스에 사용이 되지만 결과보단 모든 요청이 신속하게 이뤄져야 하는 서비스에서는 추천되지 않는 통신 방법이다.

  • 단순히 동기라는 단어를 들으면 대부분의 분들이 어떤 작업이 끝나지 않으면 그 뒤의 작업이 진행이 안 된다는 느낌으로만 알고 있지만 동기는 동시에 똑같이 진행된다는 뜻을 가지고 있다. 예를 들어, 아이폰을 동기화한다고 하면 아이튠즈와 아이폰이 동시에 같은 상태로 업데이트가 되는 것을 의미하는 것이다.
  • 대표적인 동기의 예로는 은행이 있다. 송금을 하고 금액을 받는 상황은 동시에 이루어져야 하기 때문이다.(한 쪽에서는 돈을 보냈지만 다른 한 쪽에서는 돈을 기다리는 상황이 생긴다면 이를 악용하는 사례들이 많을 것이다.

비동기 통신

비동기 통신(Asynchronous)이란 request에 대한 response를 기다리지 않고 계속 request를 보내는 방식이다. 따라서 응답 순서는 요청 순서와 다를 수 있다. 해당 방식은 결과보다는 더 빠른 성능이 요구되는 서비스에 적절하고, 결과가 중요한 서비스에서는 추천하지 않는 방식이다.

  • 비동기는 동기의 반대이다. 비동기는 동시에 똑같이 진행되지 않는다는 뜻을 가지고 있다. 작업들의 요청과 응답의 타이밍이 같지 않아도 된다는 것이다.
  • 대표적인 비동기의 예로는 시험이 있다. 학생은 시험지를 풀고 채점을 기다리면 되고, 선생은 채점을 하여 학생에게 건네기만 하면 된다. 진행 타이밍은 중요하지 않다.

동기와 비동기의 장단점

  • 동기는 설계가 간단하지만 결과가 나오지 않는다면 뒤의 작업을 진행할 수가 없다.
  • 비동기는 설계가 복잡하지만 결과가 나오지 않아도 기다리는 시간동안 병렬적으로 다른 작업을 수행할 수 있다.

블록(block)

  • 블록은 어떤 함수를 호출했을 때, 원하는 작업들을 모두 끝마칠 때까지 기다렸다가 return 되면 이것을 보고 블로킹 되었다고 한다.

논블록(non-block)

  • 논블록은 어떤 함수를 호출했을 때, 원하는 작업들을 요청하고 바로 return 되면 이것은 논블로킹되었다고 한다.

보통 블로킹/동기, 논블로킹/비동기를 함께 묶어서 말한다.

상황에 따라 다르지만 가장 효율성이 좋은 방식은 논블로킹/비동기 방식에 버퍼와 멀티스레드를 결합하는 방식이다.

const fs = require('fs'); fs.readFile('/file.md', (err, data) => { 
// readFile 호출해 놓고 바로 리턴한다. 
if (err) throw err; // 하지만 이 일에 대한 인과관계 장치를 마련해 둔다.

}); 
... 다른일을 한다 ...

버퍼(buffer, 문화어: 완충기억기)

버퍼(buffer)는 데이터를 한 곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는 메모리의 영역이다. 버퍼가 늘어나는 것은 암기를 할 뇌가 늘어나는 것이라고 생각하면 편할 것 같다.

스레드(thread)

스레드(thread)는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다. 일반적으로 한 프로그램은 하나의 스레드를 가지고 있지만, 프로그램 환경에 따라 둘 이상의 스레드를 동시에 실행할 수 있다. 이러한 실행 방식을 멀티스레드(multithread)라고 한다.

멀티프로세스와 멀티스레드

멀티프로세스와 멀티스레드는 양쪽 모두 여러 흐름이 동시에 진행된다는 공통점을 가지고 있다. 하지만 멀티프로세스에서 각 프로세스는 독립적으로 실행되며 각각 별개의 메모리를 차지하고 있는 것과 달리 멀티스레드는 프로세스 내의 메모리를 공유해 사용할 수 있다. 또한 프로세스 간의 전환 속도보다 스레드 간의 전환 속도가 빠르다.

병목(bottleneck)

병목(bottleneck) 현상은 전체 시스템의 성능이나 용량이 하나의 구성 요소로 인해 제한을 받는 현상을 말한다.

 

 

'Programming > Programming' 카테고리의 다른 글

[JSP] JSP(Java Server Pages)  (0) 2022.07.24
반응형 웹  (0) 2022.07.24
참조자(Reference)  (0) 2022.07.24
크로스 플랫폼(Cross Platform)  (0) 2022.07.18
리눅스 vi 명령어 정리  (2) 2022.06.09
'Programming/Programming' 카테고리의 다른 글
  • 반응형 웹
  • 참조자(Reference)
  • 크로스 플랫폼(Cross Platform)
  • 리눅스 vi 명령어 정리
arajo
arajo
  • arajo
    아라 메모장
    arajo
  • 전체
    오늘
    어제
    • 분류 전체보기 (509)
      • Language (298)
        • HTML (55)
        • CSS (11)
        • JavaScript (70)
        • TypeScript (8)
        • Python (33)
        • Java (119)
        • C (0)
        • C# (2)
      • Programming (92)
        • Programming (14)
        • Web (51)
        • Apache (1)
        • MySQL (23)
        • AWS (3)
      • Framework | Library (26)
        • Framework | Library (3)
        • Vue.js (2)
        • React.js (5)
        • React Native (4)
        • Node.js (1)
        • Ajax (1)
        • Bootstrap (8)
        • Spring (1)
        • Flutter (1)
      • etc (2)
      • 휴식 (19)
        • 책 (13)
        • 일기 (5)
        • 게임 일기 (1)
      • A (71)
        • 공부 (18)
        • 기타 (6)
        • 일 (47)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    제어문
    array
    CSS
    event
    react
    MySQL
    object
    파이썬
    TypeScript
    리액트
    next.js
    자바스크립트
    Python
    변수
    Java
    JavaScript
    타입스크립트
    HTML
    web
    객체
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.1
arajo
동기 통신과 비동기 통신
상단으로

티스토리툴바