on
백그라운드에서 javascript가 작동하는 방법(1부)
백그라운드에서 javascript가 작동하는 방법(1부)
반응형
안녕하세요 커뮤니티
현재 자바스크립트는 세계에서 가장 인기 있는 프로그래밍 언어 중 하나이다.
이 블로그에서 나는 당신이 웹 개발자로서 알아야 할 javascript에 대한 가장 중요한 개념을 공유할 것입니다.
실행 스레드 및 글로벌 실행 컨텍스트
javascript가 단일 스레드 언어라는 것은 모든 javascript 코드가 실행 스레드를 사용하여 한 줄씩 실행된다는 것을 의미하며, 이 프로세스는 전역 실행 컨텍스트라고 불리는 컨테이너 내에서 발생합니다.
그러나 이 글로벌 실행 컨텍스트는 코드 줄을 포함할 수 있고 함수 또한 포함할 수 있습니다. 그렇다면 자바스크립트는 어떻게 이 상황을 처리할 수 있을까요?
답은 자바스크립트의 모든 함수는 자체 실행 컨텍스트를 가지고 있다는 것이다. 자바스크립트가 호출되면 실행 스레드가 글로벌 실행 컨텍스트를 브레인 새로운 실행 컨텍스트를 만들 것이다. 그러면 실행 스레드는 글로벌 실행 컨텍스트를 브레인 새로운 실행 컨텍스트를 만들 것이다. 그리고 함수의 코드를 한 줄 한 줄씩 실행하기 시작할 것이다. 자바스크립트는 모든 실행을 관리한다. Call Stack이라고 불리는 것과의 컨텍스트를 볼 수 있습니다.
콜 스택(선입선출 후)
기본적으로 호출 스택은 전역 실행 컨텍스트를 포함하며, 호출된 함수가 자바스크립트를 호출 스택 안에 밀어넣어 실행 스위치의 스레드가 글로벌에서 이 새로운 실행 컨텍스트를 향하도록 하고, 함수 실행이 완료된 자바스크립트를 호출 스택에서 제거하면 실행 스레드는 글로벌로 돌아갑니다.
이 예에서 실행의 스레드가 줄 7 javascript에 올 때, 이것은 코드의 단순한 줄은 아니지만 함수 호출이기 때문에 이 함수를 호출 스택에 밀어넣고 두뇌의 새로운 실행 컨텍스트를 생성함으로써 실행의 스레드가 글로벌에서 이 새로운 실행 컨텍스트를 이 새로운 컨텍스트를 실행으로 전환하고 S의 코드를 던져라.한 줄 한 줄 안녕하세요.
콜백, 콜백 대기열 및 이벤트 루프
자바스크립트는 많은 작업을 동시에 처리할 수 없는 단일 스레드 언어이지만 비동기적인 특성 때문에 비동기식 연산을 실행할 때 자바스크립트가 비동기식 코드의 결과를 기다리지 않았기 때문에 느린 언어(예: d 가져오기)가 됩니다.ata from data베이스). 따라서 결과를 기다리지 않고 비동기 코드를 실행하고 결과가 callBack 함수를 사용하여 javascript가 준비되면 다음 줄로 점프하는 것이 아이디어입니다. 콜백 함수를 단순화하는 것은 결과를 얻거나 조작하기 위해 비동기식 연산이 수행될 때 일반적인 함수이다.
그러나 이제 문제는 자바스크립트가 이러한 콜백 기능을 어디에 저장하고 어떻게 주문을 관리할 수 있는가 하는 것이다. 답은 콜백 대기열입니다. 기본적으로 이것은 비동기 작업이 완료될 때까지 콜백 함수를 저장하기 위해 사용하는 간단한 대기열입니다.
이 예에서는 getUserDataFromApi라는 비동기 함수를 사용하여 실제 http 요청을 시뮬레이션한 데이터를 가져오고 ShowUserData라는 콜백 함수를 통과하여 사용자 데이터를 인수로 사용하여 이를 기록하는 데 1초가 걸립니다.
실행 스레드가 getUserdataFromApi() 함수를 줄 13에서 실행할 경우 어떻게 될까요?
스레드가 8행 getUserdataFromApi()에 도착하면 Call Stack에 새로운 실행 컨텍스트를 생성하고 CallBack 함수 ShowuserData를 CallBack 큐에 푸시합니다.
javascript는 결과를 1초 기다리지 않고 콜 스택에서 getUserdataFromApi()를 제거하고 전역으로 돌아가 다음 줄을 실행하고 숫자 2를 기록합니다.
1초 후에 결과가 완료되고 콜 스택이 비어 있으면 자바스크립트가 ShowUserData()를 제거하고 콜 스택에 밀어넣고 브레인 새 실행 컨텍스트를 만듭니다.
콜백 큐의 어떤 함수도 이 콜 스택이 비어 있을 때 콜 스택에 푸시된다는 것을 알아야 하는 중요한 정보가 있지만 문제는 자바스크립트가 스택이 비어 있는지 아닌지를 어떻게 알 것인가 하는 것이다.
여기서는 스택이 비어 있는지 여부를 확인하는 역할을 하는 이벤트 루프를 소개합니다. 2초 후에도 호출 스택이 비어 있지 않으면 ShowUserData가 더 기다립니다.
이 예제의 결과는 다음과 같습니다.
1
2
사용자 데이터
from http://it-ground.tistory.com/299 by ccl(A) rewrite - 2021-10-13 12:27:46