웹브라우저. 왜 중요한가?
대부분 프로그래밍 언어들은 운영체제(operating system, os ) 에서 실행되지만,
자바스크립트는 브라우저에서 HTML, CSS 와 함께 실행된다.
내가 짠 코드를 웹브라우저가 실행시켜 준다는 말이다.
그래서 웹브라우저 환경을 고려할 때 효율적 프로그래밍이 가능한 것이다.
참고.
https://frontj.com/entry/1-Javascript%EC%99%80-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80
stack 은 무엇인가?
stack에 대해 알기 전에 아주 간단하게 배경을 알아보자.
프로세스
메모리 상에서 실행중인 프로그램
프로세스는 최소 하나의 thread를 보유하고 있으며, 별도의 주소공간을 독립적으로 할당받는다. (stack, code, heap )
thread
프로세스가 할당받은 자원을 이용하는 실행의 단위
프로세스가 가지고 있는 (stack, code, heap ) 중에 stack만 할당받고, 나머지는 다른 thread 끼리 서로 공유
single thread
thread가 하나라는 말이다.
문맥교환(context-switch : 다른 thread로 이동, 왓다갓다 하면서 조금씩 작업을 끝내는것) 없고, 동기화가 필요가 없다는 장점 있다..
난이도가 쉽고, cpu를 적게 사용한다.
연산량이 많은 경우 그걸 해결할 때 까지 다른 처리를 하지 못한다.
multi thread
thread가 여러개 라는 말이다.
중단되거나, 긴 작업 수행시 프로그램의 수행이 계속된다.
thread 수만큼 자원을 많이 사용한다. 프로그램 난이도가 높다.
문맥교환(context-switch), 동기화가 필요해서(엉뚱한 값을 읽어올 수 있음), 오히려 single thread 보다 더 오래 걸릴 수 있다.
더 많은 것들이 있지만 일단은 이정도로만 알아두자.
수많은 코드들을 처리함에 있어서,
stack 이라는 공간에 넣어두고 순서대로 실행시키는 공간!
한번에 하나의 코드만 실행이 가능하며, 코드의 병렬처리는 불가하다. ("single thread " 니까)
참고
비동기식 처리
자바스크립트는 원래 동기식 처리를 하는 언어이다.
왜냐? stack 에서 한번에 한줄을 실행하기 때문!!!
근데 자바스크립트가 비동기 언어라고 하는 말을 들은거 같다.
그 이유를 살펴보자.
자바스크립트는 가끔 비동기식 처리를 한다.
setTimeout() 함수 라던지, ajax 요청이라던지, 이벤트리스너 라던지
이런 것들은 바로 처리되는게 아니라 처리하는데 시간이 좀 걸린다.
(눌러야 작동한다던지, 몇초뒤에 작동한다던지, 데이터를 불러오기 까지 시간이 걸린다던지..)
이런 경우에는 stack에 쌓여서 길을 막는게 아니라
현명하게 다른곳에 빼둔다.
그동안 stack 은 계속 순서대로 코드를 처리한다.
그러다가 현명하게 다른곳에 빼둔 코드가 실행되면 바로 stack으로 들어가지 않는다.
Queue 라는 공간으로 들어가고,
stack이 빈 공간일 때에 비로소 Queue에서 stack 으로 코드가 이동한다.
그렇게 실행되게 되는것.....
하지만 알아두어야 할 것이 있다.
자바스크립트 언어 고유의 기능으로 비동기식 처리를 하는것이 아닌,
웹브라우저에서 자바스크립트 실행을 돕기 때문에 가능한 것이다.
'JS (Java Script)' 카테고리의 다른 글
프로미스 패턴 없이 프로미스 만들기. async 와 await (0) | 2023.09.13 |
---|---|
ES6 프로미스 패턴 !!("콜백지옥" 으로 부터 탈출) (0) | 2023.09.13 |
destructuring 문법__ 배열의 요소, 오브젝트 요소 변수에 담기. (0) | 2023.09.12 |
.js 파일 연결하기 (src) (export, import) (0) | 2023.09.12 |
object 데이터 다룰때 함수 사용하기. (getter, setter) (0) | 2023.09.07 |