공부방
프로세스(Process) vs 스레드(Thread)를 쉽게 알아보기 본문
프로세스?
- 사전적 의미 : 실행 중인 프로그램
- 독립적인 작업 단위(실행 중인 프로그램)
- 운영체제가 관리
- 자신 만의 메모리 공간이 따로 있다.
- 다른 프로세스와 메모리를 공유하지 않는다.(독립적)
- 예시
- 컴퓨터에서 Chrome 브라우저를 켰다. 그러면 'Chrome.exe' 라는 프로그램이 실행
=> 이 실행 중인 프로그램이 바로 프로세스. - 카카오톡을 실행했다고 했을 때, 카카오톡이라는 프로세스가 하나 만들어지는 것
- 컴퓨터에서 Chrome 브라우저를 켰다. 그러면 'Chrome.exe' 라는 프로그램이 실행
프로세스의 쉬운 비유
- 회사에서 여러 개의 사무실을 생각했을 때
- 회사 안에는 각 부서(팀)이 따로 있다.(영업팀, 개발팀, 마케팅팀..등)
- 이 각 부서가 '프로세스'
- 각 부서는 자기만의 사무실(메모리 공간)을 가지고 있다.
- 다른 부서(프로세스)와 공간을 공유하지 않는다.
- 결론
- 프로세스는 운영체제가 관리하는 독립적인 작업 단위
- 각 프로세스는 자기만의 메모리 공간을 사용한다.
스레드?
- 사전적 의미 : 프로세스 안에서 실행되는 하나의 작업 흐름
- 한 프로세스 안에는 여러 개의 스레드가 있을 수 있다.
- 모든 스레드는 프로세스의 메모리를 공유한다.
- 예시
- Chrome 브라우저(프로세스)를 실행했을 때 브라우저에서는 여러 개의 탭을 열어 동영상 재생, 웹 사이트 띄우기, 다운로드 등 많은 작업을 동시에 가능
=> 이렇게 여러 작업이 동시에 돌아가는 이유가 스레드 때문 - 스레드는 프로세스 안에서 실제 일을 하는 단위
- Chrome 브라우저(프로세스)를 실행했을 때 브라우저에서는 여러 개의 탭을 열어 동영상 재생, 웹 사이트 띄우기, 다운로드 등 많은 작업을 동시에 가능
스레드의 쉬운 비유
계속해서 회사에 비유한다면
- 프로세스 = 회사의 부서(팀)
- 스레드 = 부서에서 일하는 직원들
- 영업팀(프로세스) 안에는 여러 명의 직원(스레드)이 있다.
- 각 직원(스레드)은 같은 사무실(메모리 공간)을 공유하면서 일한다.
- 즉, 한 프로세스 안에서 여러 스레드가 같은 데이터(메모리)를 공유하면서 협력해서 작업하는 것
- 결론
- 스레드는 프로세스 안에서 실제로 일을 수행하는 단위
- 같은 프로세스 안에 여러 개의 스레드가 있을 수 있고, 이들은 같은 메모리를 공유
결론
프로세스(Process) | 스레드(Thread) | |
정의 | 실행 중인 프로그램 | 프로세스 내부에서 실행되는 작은 작업 단위 |
메모리 | 각 프로세스는 독립적인 메모리 공간을 가짐 | 같은 프로세스 내에서 메모리를 공유 |
통신 방식 | 프로세스끼리는 메모리를 공유하지 않으므로 통신이 어려움(IPC 필요) | 같은 프로세스 안에 있기 때문에 공유된 메모리를 통해 쉽게 통신 가능 |
독립성 | 하나의 프로세스가 죽어도 다른 프로세스에는 영향 없음 | 하나의 스레드가 오류로 종료되면 같은 프로세스 내 다른 스레드도 영향을 받을 수 있음 |
예시 | 크롬 브라우저, 카카오톡, VS Code 실행 | 크롬 브라우저 내 여러 개의 탭, 카카오톡에서 메시지 송수신과 파일 전송 |
멀티스레드란?(Multi-threading)
멀티스레드란 하나의 프로세스 내에서 여러 개의 스레드가 동시에 실행되는 것을 의미
즉 하나의 프로그램이 여러 작업을 동시에 수행할 수 있도록 하는 기술
쉬운 예)
- 연극을 하는 배우(스레드)와 무대(프로세스)
- 프로세스(Process) : 연극 무대 전체(하나의 독립적인 프로그램)
- 스레드(Thread) : 배우 (각 스레드는 독립적으로 행동 가능)
- 싱글스레드는 배우가 한 명이라 한 번에 하나의 대사만 말할 수 있다.
- 멀티스레드는 여러 배우가 동시에 대사를 말할 수 있다. -> 작업이 병렬적으로 수행된다.
싱글스레드 vs 멀티스레드 차이점
- 싱글스레드(Single-thread)
- 하나의 스레드만 실행 -> 하나의 작업이 끝나야 다음 작업 실행 가능
- 실행 속도가 상대적으로 느림
- 예 : 한 명의 요리사가 한 명씩 주문을 받고 요리를 하는 경우
-> 손님이 많아지면 대기 시간이 길어짐
- 멀티스레드(Multi-thread)
- 여러 개의 스레드가 동시에 실행
- 여러 작업을 동시에 수행할 수 있다. -> CPU 자원을 효율적으로 활용
- 예 : 여러 요리사가 동시에 여러 개의 요리를 만드는 경우
-> 손님이 많아도 요리가 동시에 진행되어 더 빠르다.
멀티스레드의 장점
- CPU 활용 극대화 -> 여러 작업을 동시에 처리하여 성능 향상
- 작업 속도 향상 -> 시간이 오래 걸리는 작업을 동시에 실행 가능
- 응답성 향상 -> UI 프로그램에서 버튼 클릭 후에도 다른 작업 수행 가능
- 리소스 공유 가능 -> 하나의 프로세스 내에서 같은 메모리를 공유 가능
멀티스레드의 단점
- 동기화 문제 : 여러 스레드가 동시에 같은 데이터에 접근하면 데이터 충돌 발생 가능
- 디버깅 어려움 : 실행 순서가 매번 다르므로 오류 찾기가 어려움
- 컨텍스트 스위칭 비용 : 너무 많은 스레드를 사용하면 오히려 성능이 저하될 수도 있다.
'문법' 카테고리의 다른 글
쿠키 vs 세션 vs 토큰 (0) | 2025.03.27 |
---|---|
Java의 예외 처리 (0) | 2025.03.24 |
JVM(Java Virtual Machine) (1) | 2025.03.24 |
자바 스레드(Thread)? (0) | 2025.03.24 |