비동기적 프로그래밍

franchesca·2021년 8월 16일
0
post-thumbnail

개념

  • 일반적으로 프로그래밍은 한번에 한 가지 일만 발생하면서 순차적으로 진행됩니다.
  • 만약 어떤 함수가 다른 함수에 영향을 받는다면, 그 함수는 다른 함수가 끝나고 값을 산출할 때까지 기다려야겠죠..
  • 유저는 이때 당황합니다. 다른 함수가 끝나기를 기다리는 과정이 유저 입장에서는 전체 프로그램이 멈춘 것처럼 보이기 때문입니다. 웹 앱이 브라우저에서 특정 코드를 실행하느라 브라우저에게 제어권을 돌려주지 않아서 브라우저가 마치 정지된 것처럼 보이는 것, 이러한 현상을 블로킹(blocking)이라고 부릅니다.
  • 컴퓨터가 여러 프로세스를 돌리는 요즘 같은 시대에서 이는 컴퓨터 성능을 효율적으로 사용하는 방식이 아닙니다.
  • 따라서 하나의 프로세스가 끝나기를 기다리는 동안 다른 작업을 할 수 있도록 하기 위해 비동기적 프로그래밍이 필요한 것이죠!

🤔 왜 블로킹이 일어나는 거에요?

자바스크립트는 기본적으로 single threaded이기 때문입니다.

Thread는 또 뭐구요ㅠ

Thread는 기본적으로 프로그램이 작업을 완료하는데 사용할 수 있는 단일 프로세스이다. 각 스레드는 한 번에 하나의 작업만 수행할 수 있습니다.

TaskA --> TaskB --> TaskC

  • 하나의 스레드에서 각 작업은 순차적으로 진행되고, 다음 작업을 시작하려면 앞의 작업이 완료되어야 합니다.
Thread 1: Task A --> Task B
Thread 2: Task C --> Task D
  • 요즘은 대다수의 컴퓨터가 여러 개의 CPU코어를 가지고 있기 때문에, 한 번에 여러가지 일을 수행할 수 있습니다.
  • Multiple thread를 지원하는 프로그래밍 언어의 경우 멀티코어 컴퓨터의 CPU를 사용하여 여러 작업을 동시에 처리할 수 있습니다.

하지만 자바스크립트는 single thread라고 했죠? 🤗

  • 따라서 컴퓨터가 여러 개의 CPU를 가지고 있어도 단일 스레드(main thread라고 불러요)에서만 작업을 실행할 수 있습니다.
  • 자바스크립트는 이런 문제를 해결하기 위해서 여러가지 툴을 도입했어요.
  • Web workers는 여러 개의 자바스크립트 청크를 동시에 실행할 수 있도록 worker라는 별도의 스레드로 보낼 수 있어요.
  • 따라서 시간이 오래 걸리는 처리는 worker를 사용해 처리하면 블로킹 문제를 해결할 수 있습니다.

웹 워커(Web worker)는 스크립트 연산을 웹 어플리케이션의 주 실행 스레드와 분리된 별도의 백그라운드 스레드에서 실행할 수 있는 기술입니다.

비동기적 프로그래밍은 주로 언제 사용해요?

  1. 사용자의 이벤트 처리
  • 우리는 언제 사용자의 이벤트가 발생할지 미리 알 수 없잖아요?
  • 그래서 이런 클라이언트 이벤트의 관리를 담당하는 함수의 인자로 이벤트가 발생했을 때 호출할 함수를 콜백 함수로 전달해주는 겁니다!
  1. 네트워크 응답 처리
  • 클라이언트단에서 서버단에 요청을 보낼 때 그 응답도 언제 올지 몰라요.
  • 그래서 이런 서버단의 응답 처리도 비동기적으로 처리해야합니다.
  1. 파일을 읽고 쓰는 파일 시스템 작업
  2. 의도적인 시간 지연
  • 예) 알람

참고: https://developer.mozilla.org/ko/docs/Learn/JavaScript/Asynchronous/Concepts

profile
말하기 보다 생각하는, 생각하기보다 볼 줄 아는 개발자가 되려고 합니다✨

0개의 댓글