자바스크립트의 동기적 처리와 비동기 처리

2024. 5. 5. 20:49·웹개발/JavaScript
728x90

자바스크립트(JavaScript)의 동기적 처리와 비동기 처리에 대한 글입니다!!!!!!!!

먼저!@!

동기적 처리는 뭐고, 비동기적 처리는 뭔지 알고 있으신가요? 저는 몰랐습니다만?;;;; ㅎㅎ

동기적 처리 => 순서대로 줄을 서서 한 명씩 일을 처리하는 것과 같습니다.

1) 코드가 한 줄씩 위에서 아래로 실행됩니다.

2) 이전 코드가 완료되지 않으면 다음코드가 실행되지 않습니다.

3) 따라서 느린 코드가 있으면 전체 속도가 느려집니다.

비동기 처리 => 여러 일을 동시에 처리하는 것과 같습니다.

1) 코드가 요청되면 즉시 다음 코드로 넘어갑니다. (요청 후 처리가 끝나지 않아도 넘어감!)

2) 요청된 작업은 다른 *스레드에서 수행되고, 완료되면 *콜백 함수를 통해 결과를 알려줍니다.

*스레드는 실행되는 작업 단위(가볍게 일1, 일2 이런 느낌)

*콜백 함수는 함수 타입의 값을 파라미터로 넘겨줘서, 파라미터로 받은 함수를 특정 작업이 끝나고 호출을 해주는 것을 의미한다.

3) 따라서 느린 코드가 있어도 다른 작업 처리에 영향을 미치지 않습니다.


function work() {
  const start = Date.now();
  for (let i = 0; i < 1000000000; i++) {}
  const end = Date.now();
  console.log(end - start + 'ms');
}

work();
console.log('다음 작업');

Date.now()는 현재 시간을 숫자 형태로 가져오는 자바스크립트의 내장함수다.

work 함수는 1,000,000,000번 루프를 돌고, 이 작업이 얼마나 걸렸는지 알려준다.

work()함수가 호출되면 for문이 돌아가는 동안 온전히 for문만 실행되고 있다. 이 작업이 진행되는 동안 다른 작업도 하고 싶다면 함수를 비동기 형태로 전환해주어야 하는데, 이를 위해 setTimeout이라는 함수를 사용해야 한다.

function work() {
  setTimeout(() => {
    const start = Date.now();
    for (let i = 0; i < 1000000000; i++) {}
    const end = Date.now();
    console.log(end - start + 'ms');
  }, 0);
}

console.log('작업 시작!');
work();
console.log('다음 작업');

SetTimeout 함수는 첫 번째 파라미터에 넣는 함수를 두 번째 파라미터에 넣은 시간(ms단위)이 흐른 후 호출해준다.

지금은 두번째 파라미터에 0을 넣었다. 따라서 이 함수는 0초 후 실행, 바로 실행이 된다.

*타이머 함수는 중첩이 가능하다. 그런데 중첩이 5번 이상이 되면 각각 지연되는 시간이 필요하다. 지연 시간은 최소 4ms(밀리초)이어야 한다.

결과를 보면, for문이 실행되는 동안 '다음 작업'이 출력되고 몇 ms가 걸렸는지 나타나고 있다.

만약 work함수가 끝난 뒤에 작업을 처리하고 싶다면 어떻게 해야 할까?

=> 콜백 함수를 파라미터로 전달해줘야 한다.

function work(callback) {
  setTimeout(() => {
    const start = Date.now();
    for (let i = 0; i < 1000000000; i++) {}
    const end = Date.now();
    console.log(end - start + 'ms');
    callback();
  }, 0);
}

console.log('작업 시작!');
work(() => {
  console.log('작업이 끝났어요!')
});
console.log('다음 작업');

여기까지가 자바스크립트의 비동기 작업에 대한 정리였다.


그렇다면 비동기적 처리는 언제 사용이 되는건가?

API 요청 : 만약 서버쪽에서 데이터를 받아와야 할때, 요청을 하고 서버에서 응답을 할 때 까지 대기를 해야되기 때문에 작업을 비동기로 처리해야한다. => 다음 포스팅 글에서 다룹니다!

파일 읽기 : 주로 서버 쪽에서 파일을 읽어야 하는 상황에는 피동기적으로 처리합니다.

암호화/복호화 : 암호화/복호화를 할 때에도 바로 처리가 되지 않고, 시간이 어느정도 걸리는 경우가 있기 때문에 비동기적으로 처리합니다.

 

728x90

'웹개발 > JavaScript' 카테고리의 다른 글

자바스크립트 형 변환  (0) 2024.05.13
자바스크립트의 자료형  (0) 2024.05.13
변수 이름 어떻게 지어요?  (0) 2024.05.13
변수랑 상수 많이 들었는데 잘 모르겠어요.. 헤헤  (0) 2024.05.13
자바스크립트의 변수형 3가지 var, let, const  (0) 2024.05.13
'웹개발/JavaScript' 카테고리의 다른 글
  • 자바스크립트의 자료형
  • 변수 이름 어떻게 지어요?
  • 변수랑 상수 많이 들었는데 잘 모르겠어요.. 헤헤
  • 자바스크립트의 변수형 3가지 var, let, const
튼튼발자
튼튼발자
프론트엔드 개발자입니다. 헬스를 가끔해서인지 몸이 튼튼한거 같습니다. 그래서 튼튼한 개발자 => 튼튼발자입니다. 프론트엔드 및 관련 개발 내용 블로그 글로 정리해서 올려둡니다.
    250x250
  • 튼튼발자
    튼튼발자
    튼튼발자
  • 전체
    오늘
    어제
    • 분류 전체보기 (192)
      • 튼튼발자의 끄적끄적 (10)
      • 웹개발 (94)
        • HTML (5)
        • CSS (2)
        • JavaScript (40)
        • TypeScript (5)
        • REACT (22)
        • Next.js (13)
        • GIt (7)
      • 기타 (3)
        • 일상 (3)
      • 프로젝트 (27)
        • Componique: UI 컴포넌트 라이브러리 (18)
        • GitHub Profile Viewer (8)
        • 잇핏 (1)
      • 프론트엔드 개발자로 취업준비 (1)
        • 기술 면접 (7)
        • 코딩 테스트 준비하기 (0)
        • 자기소개서&지원서&이력서 (0)
      • 컴퓨터과학 (12)
        • 운영체제 (6)
        • 알고리즘 (6)
      • 전공 공부 (37)
        • AI(인공지능) (2)
        • 컴퓨터네트워크 (19)
        • 네트워크프로그래밍 (3)
        • SW소프트웨어응용설계 (7)
        • 클라우드컴퓨팅 (3)
        • 웹서비스프로그래밍 (3)
      • PT (0)
      • 취준일기 (0)
  • 블로그 메뉴

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

  • 공지사항

  • 인기 글

  • 태그

    NextJs
    ui컴포넌트
    자바스크립트
    TCP
    웹개발
    프로그래밍
    JS
    상태관리
    github
    네트워크
    리액트
    JavaScript
    react
    componique
    코딩
    tailwind
    프론트엔드개발
    트랜스포트계층
    프론트엔드
    데이터전송
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.0
튼튼발자
자바스크립트의 동기적 처리와 비동기 처리
상단으로

티스토리툴바