프로그램이 실행되면 프로세스 인스턴스가 생성된다.
프로그램 실행에 필요한 내용이 컴퓨터 메모리(Ram)에 적재 된다는 뜻이다.
어떤 작업을 하기 위해 실행할 수 있는 파일 또는 프로그램 .exe
OS(운영체제)를 통해 CPU가 작업하는데 필요한 자원(시간)을 프로세스 또는 스레드 간의 나누는 행위
CPU는 한번에 한가지 명령어 밖에 처리하지 못한다.
동시가 아닌 재빠르게 프로세스들을 번갈아 가며 실행하고, 관리한다.
CPU 가 상상이상으로 빠르기 때문에 프로세스들이 번갈아가며 실행하고, 관리하는것이 동시에 하는 것 처럼 보일뿐이다.
- 코드 영역: 코드 자체를 구헝하는 메모리 영역 (프로그램 명령)
- 데이터 영역: 전역변수, 정적변수
- 스택 영역: 지역변수, 함수 매개변수, 리턴 값 (임시 메모리 영역)
- 힙 영역: 동적 할당 시 사용 (new(),malloc())
하나의 애플리케이션을 여러 개의 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는것.
- 안정성이 좋다. 여러개의 자식 프로세스 중 하나에묹가 발생해도, 다른 자식 프로세스에 영향이 확산 되지 않는다.
- 구현이 비교적 간단하고, 각 프로세스들이 독립적으로 동작하며 자원이 서로 다르게 할당된다.
- 프로세스 간 통신을 하기 위해서는 IPC를 통해야한다.
- 메모리 사용량이 많다.
- 스케쥴링에 따른 Context Switch이 많아지고, 성능 저하의 우려가 있다.
어떠한 프로그램 내에서 특히 프로세스 내에서 실행되는 흐름의 단위.
일반적으로 하나의 애플리케이션(프로그램)은 하나 이상의 프로세스를 가지고 있고, 하나의 프로세스는 반드시 하나 이상의 스레드를 갖는다.
하나의 프로그램을 여러 개의 스레드로 구성하고 각 스레드가 하나의 작업을 처리하도록 하는것
멀티스레드 특징
- 응답성이 좋다. 프로그램의 일부분(자식 스레드)이 오류 또는 긴 작업으로 인해 중단되어도 프로그램이 계속 적으로 수행된다.
- 자원 공유가 쉽다. 스레드들은 부모 프로세스의 자원과 메모리를 공유 할 수 있다.
- 프로세스를 할당하는 것보다 스레드를 할당하는 것이 비용이 적다.
- 멀티프로세서 구조에서 각각의 스레드가 다른 프로세서에서 병렬로 수행될 수 있다.
- 구현 및 테스트, 디버깅이 어렵다
- 너무 많은 스레드 사용은 오버헤드를 발생시킨다.
- 동기화 그리고 교착상태가 발생하지 않도록 주의해야 한다.
- 자식 스레드 중 하나에 문제가 생긴경우 전체 프로세스에 영향을 줄 수 있다.
Thread-safe
- 멀티스레드 환경에서 여러 스레드가 동시에 사용되어도 안전하다는 것을 말한다.
- 즉, 여러 스레드가 프로세스의 공유 자원(하나의 객체 및 변수)에 접근할 때, 공유 자원의 무결성을 보장하는(=자원 동기화가 잘 되지 않는 이슈 없이 의도한 대로 동작하는) 것을 말한다.