#오늘 배운 것
프로세스와 스레드는 운영체제(OS, Operating System)에서 배우는 개념이고, 비동기는 CS 개념이라기보단 개발하다보면 많이 접하는 개념이다.
프로세스가 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리하는데, 이를 프로세스 주소 공간이라고 부른다.프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성된다.
Code: 코드 자체를 구성하는 메모리 영역(프로그램 명령)
Data: 전역변수, 정적변수 등
Stack: 지역변수, 함수 매개변수, 리턴 값 (임시 메모리 영역)
Heap: 동적 할당 시 사용 (new(), malloc() 등)
기본적으로 프로세스마다 최소 1개의 스레드(메인 스레드)를 갖는다.
멀티 프로세스
하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
- 프로세스란?
- 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스
- 스레드란?
- 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위
- 멀티 프로세스란?
- 하나의 프로그램을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것
- 멀티 스레드란?
- 하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는 것
- 멀티 프로세스 vs 멀티 스레드, 언제 뭘 사용해야 하는가?멀티 스레드는 멀티 프로세스보다 적은 메모리 공간을 차지하고 Context Switching이 빠르다는 장점이 있지만, 오류로 인해 하나의 스레드가 종료되면 전체 스레드가 종료될 수 있다는 점과 동기화 문제를 가지고 있다.따라서 대상 시스템의 특징에 따라 오류가 나서 프로세스가 죽었을 때 크리티컬한 이슈가 발생하는지, Context Switching이 발생 빈도가 빈번한지 등을 따져 잘 선택해야 한다.
- 반면, 멀티 프로세스 방식은 하나의 프로세스가 죽더라도 다른 프로세스에는 영향을 끼치지 않고 정상적으로 수행된다는 장점이 있지만, 멀티 스레드보다 많은 메모리 공간과 CPU 시간을 차지하고 Context Switching에 많은 비용이 든다는 단점이 존재한다.
- 이 두 가지는 동시에 여러 작업을 수행한다는 점에서 같지만 적용해야 하는 시스템에 따라 적합/부적합이 구분된다.
비동기
비동기는 동시에 일어나지 않는다를 의미합니다. 요청과 결과가 동시에 일어나지 않을거라는 약속
- 요청한 그 자리에서 결과가 주어지지 않음
- 노드 사이의 작업 처리 단위를 동시에 맞추지 않아도 된다.
block과 non-block, sync와 async
Java의 비동기
- 기본적으로 멀티 스레드 방식이다.
- JVM(Java Virtual Machine)에 의해 스레드 스케줄링이 이뤄진다.
- 활용 예시
- Request 요청 처리, DB 접근 등
- JavaScript의 비동기
- 특징
- JavaScript는 싱글스레드 논블로킹 모델의 환경에서 실행됩니다.
- 호출 스택: 동기코드를 담당. 함수들이 실행되는 데이터공간.
- 백그라운드: 비동기 작업을 실행하는 공간.
- 태스크 큐: 비동기 작업이 끝나서 이후 실행돼야 할 콜백 함수들이 줄을 서서 대기하고 있는 공간. 바로 실행되지 않고 호출 스택이 비워지면 이벤트 루프에 의해 호출 스택으로 옮겨져서 실행된다.
- 이벤트 루프: 호출 스택이 비어 있는게 확인되면 이벤트 루프는 태스크 큐에서 함수를 하나씩 꺼내(들어온 순서로 꺼냄) 호출 스택으로 옮긴다.
- 활용 예시
- 타이머, 사용자와의 인터럭션(키보드/마우스 등 장치의 입출력), 네트워크 요청 등
SPA
ex) 라프텔
MPA
ajax - js 비동기
네트워크304 캐싱을 한 것을 바로 전달한 상태. 미리 저장한 상태에서 요청하면 보여주는 식.어찌보면 spa라고 보면 된다.
spa 에서는 ajax로 해당 섹션만 렌더링 해준다는 건아니다. == 거래 ajax
'[내일배움캠프] > TIL' 카테고리의 다른 글
| 22.11.22)팀플과 Firebase 추가 삭제를 진행한 17일차 (1) | 2022.11.22 |
|---|---|
| 22.11.21)Firebase와 팀플을 진행한 16일차 (1) | 2022.11.21 |
| 22.11.17)Git과 FIREBASE,웹퍼블리싱에 대한 14일차 (1) | 2022.11.17 |
| 22.11.16)SPA와 DB를 배운 13일차 (1) | 2022.11.16 |
| 22.11.15)알고리즘을 배운 12일차. (1) | 2022.11.15 |