프로그램
- 컴퓨터 명령어의 집합
- 메모리에 올라가있지 않음
- 정적인 상태
프로세스
- 컴퓨터에서 실팽되고 있는 프로그램
- OS가 프로세스별로 독립된 메모리 영역 할당 (code, data, stack, heap)
- 일반적으로 프로세스끼리는 공유 자원이 없어서 하나가 죽어도 다른거에 영향 X
- OS 입장에서 작업의 단위
스레드
- 프로세스의 한계 극복
- 프로세스마다 본인에게 할당된 메모리 내 정보만 접근 가능
- 프로그램을 여러 프로세스로 나누면 자원 공유가 힘듦
- 스레드끼리 프로세스의 자원을 공유함 (heap, code, data)
- 스레드마다 스택은 따로 갖고있음
- 프로세스의 특정한 수행 경로
- CPU 입장에서 작업의 단위
- 스레드 하나가 터지면 공유자원때문에 프로세스 전체가 터질 수 있음
프로세스끼리의 통신
- IPC (InterProcess Communitacion)
- context switching 을 해야하는데 이게 비쌈
스레드끼리의 통신
- 공유 자원이 있으므로 context switching 비용 절감 + 속도 빠름 + 메모리 절약
- 공유 자원에 대한 동기화 이슈 발생 가능