일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- 백준 17425
- 프로그래머스 네트워크 java
- 네트워크
- 자바
- sort
- Math.ceil()
- Math.floor()
- 프로그래머스 숫자의 표현 java
- 0으로 채우기
- 백준 18290
- 프로그래머스 연속된 수의 합 java
- 백준 4375
- Codility
- 백준 16935
- java 반올림
- 백준 15661
- 백준 14391
- 백준 11723
- 알고리즘
- time complexity
- java
- Arrays
- 백준 16927
- 프로그래머스 옹알이 java
- Algorithm
- java 내림
- mysql
- 코딩테스트
- java 올림
- 프로그래머스 도둑질 java
- Today
- Total
취미처럼
[CS] 프로세스, 쓰레드 본문
1. 프로세스(Process)
프로그램이 메모리에 적재(load)되고, CPU를 할당받아 실행되면 프로세스
메모리(Memory)
CPU가 직접 접근할 수 있는 저장공간
메모리 공간은 code, data, stack, heap의 네가지 영역으로 이루어져 있으며, 각 공간은 프로세스마다 독립적임
code | 실행할 프로그램의 코드가 저장되어 CPU가 하나씩 처리함 |
data | 전역변수(global), 정적변수(static), 배열, 구조체 등이 저장되는 영역 |
heap | 프로세스가 실행중(runtime)에 사용하려고 동적으로 할당 받은 공간(사용자가 할당 및 해제를 해야 함) |
stack | 지역변수, 매개변수 등을 저장하는 영역으로 프로그램이 자동으로 사용하는 임시 메모리 영역, 컴파일 시 스택 사이즈가 결정되어 런타임 시 사이즈 변경 불가, 함수 종료 시 시스템에 반환 |
멀티 프로세스(Multi Process)
2개 이상의 프로세스가 동시에 실행되는 것으로 프로세스들은 CPU와 메모리를 공유함
1. 동시성
Single Core 일 때 여러 프로세스를 짧게 번갈아가며 연산하여 동시에 실행되는 것처럼 보이는 것
2. 병렬성
Multi Core 일 때 각 코어가 각 프로세스를 연산함으로써 프로세스가 실제로 동시에 실행
여러 프로세스 중 하나에 문제가 발생하더라도 그 프로세스만 문제될 뿐이지 확산되지 않음
각 프로세스가 독립된 메모리 영역을 가지고 있기 때문에 작업량이 많아지면 오버헤드가 발생함
2. 쓰레드(Thread)
한 프로세스 내에서 실행되는 작업의 단위
멀티 쓰레드(Multi Thread)
하나의 프로세스에서 동시에 여러 작업을 병렬로 수행할 수 있도록 하는 것
메모리 공간, 시스템 자원의 효율성 증가
각 쓰레드는 독립적으로 기능을 수행하기 때문에, 속해있는 프로세스의 stack 메모리 영역을 제외한 나머지 메모리 영역(code, data, heap)을 공유함 (동기화 문제 발생 가능)
쓰레드가 독립적으로 기능을 수행한다는 것은 함수를 각각 독립적으로 호출한다는 의미이고, 이를 위해 각 쓰레드가 독립적인 stack 메모리를 필요로 함
하나의 쓰레드에 문제가 생기면 전체 프로세스가 영향을 받음
※ 데드락(Deadlock)
프로세스가 자원을 얻지 못해 다음 처리를 하지 못하고 멈추어 있는 교착상태
둘 이상의 프로세스/스레드가 다른 프로세스/스레드가 점유하고 있는 자원을 기다릴 때 무한 대기상태에 빠지게 됨