1. 프로세스
1) 정의
- 메모리에 적재되어 실행되고 있는 프로그램의 인스턴스
- OS로부터 시스템 자원을 할당받은 작업의 단위
인스턴스
- 설계된 것을 바탕으로 구현된 구체적인 실체
- 붕어빵 틀(설계된 것, 클래스)과 붕어빵(인스턴스)이 보통 예시로 많이 사용됨
시스템 자원
- CPU 시간
- 실행되기 위해 필요한 독립된 메모리 영역
2) 특징
- 프로세스는 독립된 메모리를 할당 받는다.
- 프로세스가 메모리를 관리하기 위해 이 공간들을 어떤 구조로 관리하는데, 이를 프로세스 주소 공간이라고 부른다.
- 프로세스 주소 공간은 Code, Data, Stack, Heap 으로 구성된다.
- Code: 코드 자체를 구성하는 메모리 영역(프로그램 명령)
- Data: 전역변수, 정적변수 등
- Stack: 지역변수, 함수 매개변수, 리턴 값 (임시 메모리 영역)
- Heap: 동적 할당 시 사용 (new(), malloc() 등)
- 기본적으로 프로세스마다 최소 1개의 스레드(메인 스레드)를 갖는다.
2. 쓰레드
1) 정의
- 프로세스 내에서 프로세스의 자원을 이용하는 여러 실행 흐름의 단위
2) 특징
- 스레드는 프로세스 내의 Code, Data, Heap 영역은 다른 스레드와 공유하고 Stack 영역을 따로 할당받는다.
- 프로세스와 해당 프로세스 내의 다른 스레드와 자원과 공간을 공유하면서 사용
3. 동기/비동기
1) 정의
- 동기 : 함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 리턴값을 계속 확인하면서 신경 쓰는것
- 비동기 : 함수 A와 함수 B를 호출할 때, 함수 A가 함수 B의 작업 완료 여부는 신경 쓰지 않는 것
function cureDisease(human, medicine) // 인자로 받은 medicine으로 human을 치료한다.
function getMedicine() // 치료에 필요한 medicine을 리턴한다.
// 동기
const human = new Human()
const medicine = getMedicine()
cureDisease(human, medicine)
// 비동기
const human = new Human()
getMedicine({
params: { human,medicine },
success: function (medicine) {
cureDisease(human, medicine)
}
})
4. 느낀 점
- 지금까지 마크업언어만 하다보니 CS에 대한 지식이 많이 부족했음을 느꼈고, 전공자에 뒤지지 않게 꾸준히 공부하여 풀스택 개발자를 목표로 마음을 다잡는 계기가 되었다.