프로그램과 프로세스, 스레드
- 하나의 프로그래의 여러 프로세스를 가질수 있다
- 프로세스는 싱글 스레드 또는 멀티 스레드로 작동할 수 있다
- 프로세스는 프로그램이 메모리에 적재되어 운영체제로부터 필요한 공간, 파일, 메모리를 할당 받는다
- node.js는 싱클 스레드로만 작동한다 ? (NO)
node.js의 Event loop는 싱글 스레드
로 작동되지만,
Worker pool
은 멀티 스레드로 작동된다
즉, node.js의 초기화와 callback은 Event loop라는 하나의 프로세스, 하나의 스레드에서 작동되지만, I/O intensive
, CPU intensive
한 모듈은 Worker pool에서 작동한다
npm worker pool
스레드
- 프로세스 내에서 실행되는 흐름의 단위
- 스레드는 다른 스레드와 독립적으로 작동한다
- 싱글 코어에서 동시에 돌릴 수 있는 스레드 수는 한개 뿐이다
- 프로세스 내 스레드는 call stack을 공유하지 않는다
프로세스는 각각 독립된 메모리 영역(Code, Data, Stack, Heap의 구조)을 할당받는다
스레드는 프로세스 내에서 각각 Stack만 따로 할당받고 Code, Data, Heap 영역은 공유한다
메모리
- 메모리 주소는 16진법으로 표현한다
- 32비트 운영체제는 최대 4GB만을 사용할 수 있다
- 메모리는 하드디스크보다 일기/쓰기 속도가 빠르다
- 32비트 운영체제와 64비트 운영체제의 포인터의 크기는 다르다
32bit 운영체제와 64bit 운영체제는 처리할 수 있는 데이터의 단위가 32bit, 64bit로 차이가 나기 때문에 사용할 수 있는 최대 메모리의 용량도 다르고, 메모리 주소의 값의 크기도 다르다
가비지 컬렉션
- 가비지 컬렉션은 프로그램에서 더 이상 스지 않는 메모릴ㄹ 찾아서 회수하는 기능이다
- 가비지 컬렉터가 내장되어 있는 프로그래밍 언어로는, C#, 자바, 자바스크립트(v8) 등이 있다
- 가비지 컬렉션의 방법으로는 트레이싱, 레퍼런스 카운팅 등의 방법이 있다
- 가비지 컬렉션은 개발자가 직접 메모리를 다룰 때에 생길 수 이쓴ㄴ 메모리 누수를 방지할 수 있다
이진 파일과 텍스트 파일의 차이점
- 텍스트 파일이 아닌 파일은 전부 이진 파일로 취급 된다
- 대표적인 이진 파일로는 비트맵 이미지 파일이나 사운드 파일, 또는 실행 가능한 파일 등이 있다
- 메모장으로 파일을 열었을때 깨져보이는 경우, 인코딩의 문제이거나 혹은 해당 파일이 이진 파일이기 때문이다
- 텍스트 파일은 운영체제별로 개행 문자 처리가 다르다
ASCII
- & 문자를 포함한다
- ASCII 문자열세트(charset) 중 출력 가능한 문자들은 52개의 영문 알파벳 대소문자와, 10개의 숫자, 32개의 특수 문자, 그리고 하나의 공백 문자로 이루어져 있다
- 유니코드에는 ASCII가 포함되어 있다 (유니코드는 ASCII를 확장한 형태다)
UFT-8, UFT-16
- 둘다 유니코드의 인코딩 형식이다
- UTF-8은 UTF-16에 비해 바이트 순서(엔디언)를 따지지 않고, 순서가 정해져 있다
- 네트워크를 통해 전송되는 텍스트는 주로 UTF-8을 이용한다
- BMP(다국어 기본 평면)에 속하는 문자열은 UTF-16을 이용할 때에 16비트로 표현이 가능하다
비트맵, 백터 이미지
해상도에 의존적인 비트맵 이미지는 <canvas>
태그를 이용해 표현한다
캐시의 장점
- 아키텍처를 보다 적은 개수의 계층으로 구성할 수 있다
- 영속적인 데이터를 저장할 수 있다
티어 별 캐시 적용
- 네트워크 - DNS 서버
- 클라이언트 - LocalStorage
- 서버 - Redis
CDN(Content Delivery Network)은 네트워크 단계에서 콘텐츠를 보다 빠르게 제공하기 위한 서비스다
전 세계 곳곳에 분산되어 있는 데이터 센터에 콘텐츠가 저장(캐싱)되어 있으며, 지리적으로 가까운 데이터 센터로 접근할 수 있도록 만들어준다