[TIL] Sync / Async / Blocking / Non-Blocking 및 SQL

krkorklo·2022년 9월 27일
0

TIL

목록 보기
26/29

Blocking vs Non-Blocking

Blocking

  • 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 해당 작업이 끝날때까지 기다렸다가 자신의 작업을 실행
  • 제어권을 바로 돌려주지 않는 경우

Non-Blocking

  • 다른 주체의 작업에 상관없이 자신의 작업을 하는 것
  • 제어권을 바로 돌려주는 경우

Synchronous vs Asynchronous

Synchronous

  • 작업이 끝나는 동시에 시작하는 것
  • 순서와 결과가 정해짐

Asynchronous

  • 끝나는 동시에 시작함을 보장하지 않는 것
  • 순서가 보장되지 않음

Sync / Async / Blocking / Non-Blocking

1) Sync + Blocking

  • Application에서 I/O 요청을 한 후 완료되기 전에는 Block되어 다른 작업을 수행할 수 없다
  • Blocking되는 시간동안 자원이 효율적으로 사용되지 않음
    → Thread로 Block 문제를 해소할 수 있지만 Thread의 Context Switching 비용이 문제

2) Async + Blocking

  • 다른 작업을 하다가 주기적으로 I/O 완료 상태를 확인 (Polling)
  • 작업이 완료되기 전까지 주기적으로 호출되어 불필요하게 자원을 사용
  • 완료 여부를 신경쓰지는 않지만 다른 일을 하지 못함
  • MySQL + NodeJS 조합

3) Async + Non-Blocking

  • I/O 요청 후 바로 return되고 I/O가 끝나면 callback으로 이후 작업이 진행
  • NodeJS가 싱글 스레드 + 이벤트 루프로 구현한 작업

4) Sync + Non-Blocking

  • 데이터를 가져올때 정보 로드율을 보여주는 경우와 비슷
  • 자신의 작업을 처리하다가 결과가 리턴되면 해당 값 처리

SQL vs NoSQL

SQL

  • 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위한 언어
  • 엄격한 스키마를 원칙으로하며 스키마에 맞지 않는 형식의 데이터는 저장할 수 없다
  • 데이터 사이의 관계를 지정하기 쉽다 (FK) → 중복없이 데이터를 다룰 수 있다

NoSQL

  • SQL보다 덜 제한적인 데이터를 관리하기 위한 언어
  • 다른 구조의 데이터를 저장할 수 있다
  • 하나의 컬렉션에 관련 데이터를 모두 작성 → 중복된 데이터가 발생해 업데이트가 있는 경우 해당 데이터를 모두 업데이트해야한다

SQL vs NoSQL

SQL

  • 관계를 맺고있는 데이터가 자주 변경되는 어플리케이션인 경우
  • 엄격한 스키마가 중요한 경우

NoSQL

  • 정확한 데이터 구조를 알 수 없거나 변경의 여지가 있는 경우
  • 읽기 처리를 자주 하지만 변경을 자주 하지 않는 경우

NodeJS + NoSQL

  • 단순한 작업의 I/O
    • Blocking + Sync + 멀티스레드 : Context Switching때문에 불필요한 자원 소모
    • Non-Blocking + Async + 싱글스레드 : 효율적 처리 가능
  • MySQL은 복잡한 데이터를 I/O하게 되고 I/O의 순서가 보장되어야하는 경우가 많다 → 싱글 스레드로 사용하면 Non-Blocking + Sync상태가 되어 비효율적
  • NoSQL은 단순한 I/O 처리에 적합 → NodeJS는 NoSQL과 어울린다

참고자료
https://siyoon210.tistory.com/130

0개의 댓글