node.js의 이벤트 루프를 막으면 안되기 때문에 비동기 작업으로 할 수 있는 일은 최대한 비동기로 한다
왼: 멀티 스레드
오 : 이벤트 루프
오로 하면 하나의 작업을 굉장히 오래하게 된다
순서대로 해버리니까
왼처럼 한번에 여러개를 할 수 있도록 하는 것
프로세스를 처리하기 위해 스레드를 하나 처리 또는 여러 개 처리할 수도 있다
노드가 textIndex를 실행
서버를 두개 킨다 : 각각에서 비동기 작업을 실행시켰다면
프로세스를 두개 실행한다
하나의 프로세스가 시행될 때 여러 개의 스레드가 시행된다
x86 x64 등
x32 프로그램 파일 : 32비트 운영체제 내에서 실행되도록 제작된 프로그램
메모리 공간 점유 : 코드에서 변수 선언 시 등등 그 기록을 어딘가에 일부 공간을 저장한다
나중에 조회를 할 때 주소값을 가지고 찾아온다
주소가 있다(포인터라고 하는)
64비트 > 32비트 : 즉 32비트는 표현할 수 있는 주소의 수가 적다
평균적으로 메모리는 읽기 쓰기가 빠르다
메모리가 읽기 쓰기 빠르기 때문에 대부분 작업을 메모리에서 해야 한다
그러므로 변수 같은 거는 무조건 메모리에 저장한다 (빨리 처리해야 하는 것들을)
ex. 유저 정보 100만개 같이 많은 양의 정보는 데이터베이스에 저장한다 (하드디스크에 있는)
하지만 이런 정보 중에서도 빠르게 조회해야 하는 정보가 있다
이런 정보들은 따로 메모리에 저장하고 이름을 "캐시"라고 붙인다
메모리를 데이터베이스로 조그맣게 쓸 수 있는 것이 캐시
메모리는 하드디스크보다 읽기 쓰기 속도가 빠르다
그러므로 빠르게 왔다갔다해야 하는 정보는 메모리에 저장한다
빨리 봤다가 날아가도 되는 정보들!(메모리에 캐싱)
자바스크립트는 가바지 컬렉션을 쓰는 언어다
구글은 크롬을 만들었다
크롬에서 가비지 컬렉션 하는 방법
: 돔에서 조회되지 않는 엘리먼트들을 메모리에서 알아서 날려버린다(크롬이)
자바스크립트에게 중요한 것 : 사용하지 않는 전역 변수를 최소화하자
call stack을 만들고 그 안에서 생성된 변수들을 해당 함수의 실행이 끝나면 없어진다
main process에서 선언한 변수들(전역변수)은 js 프로세스가 끝날 때까지 메모리를 차지한다
그러므로 최소화하는 것이 중요하다!
자바스크립트에서는 가비지 컬렉션을 사용,
가바지 컬렉션은 사용하지 않는 변수는 자동으로 메모리에서 제외
함수 실행이 끝나면 그 스코프 안에 있는 변수들이 더 이상 참조를 하지 않기 때문에 가비지 컬렉션에 의해 사라지지만 전역 변수는 사라지지 않는다
(가비지 컬렉션 되기 어려운 전역 변수를 최소화하자!)
왼 : 텍스트
오 : 이진
-> 오는 컴퓨터가 읽을 수 있는 파일
이모지를 입력하기 위해서는 utfgmb4
svg 태그는 파일
캐시의 장점으로 틀린 것을 모두 고르면?
메모리를 활용하는 것이 훨씬 db나 인메모리보다 더 부하를 줄일 수 있다
영속적인 데이터가 아니다
대부분의 경우 날아간다
파일이 있고 이 파일을 받아오기 위해 미리미리 받아온다
클라 내부에서 캐싱하는 의도는 아니고 서버에서 보낼 수 있고 외부 서비스에서 받을 수 있는데 클라이언트 입장에서 받은 거는 아니다