프로세스(Process): 운영체제로부터 자원을 할당받은 작업의 단위
스레드(Thread): 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
모든 프로그램은 운영체제가 실행되기 위한 메모리 공간을 할당해 줘야 실행된다.
프로그램을 실행하면 해당 프로그램은 메모리에 올라가게 되고, 운영체제로부터 시스템 자원을 할당받아 프로그램을 실행시킨다.
스레드 특징
- 스레드는 프로세스 내부에 존재하므로 프로세스의 데이터 영역에 접근이 가능하다.
- 스레드끼리 서로의 데이터에 접근 가능하다.
- 스레드도 하나의 작업단위라 병렬처리가 가능하다.
- 프로세스의 메모리영역은 code, data, stack, heap으로 나뉘지만, 스레드는 stack 메모리 공간만 갖는다.
- 하나의 프로세스 내부에 여러개의 스레드를 가질 수 있다.
싱글 스레드: 하나의 프로세스가 하나의 스레드에서 실행된다. 모든 작업단위가 순차적으로 실행되며 모든 작업이 끝나려면 모든 작업시간의 총량만큼 기다려야한다.
멀티 스레드: 하나의 프로세스가 여러 스레드에서 실행된다.
멀티 스레드 장점
- 응답성: 스레드간의 작업 분할과 병렬 처리로 인해 빠른 작업에 대한 응답을 제공할 수 있다.
- 자원 공유 효율성: 스레드는 하나의 프로세스 내에서 실행되기 때문에, 프로세스 자원을 공유하여 접근할수 있다. 스레드는 프로세스 메모리의 스택영역을 복사해가기 때문에 별도로 메모리공간을 할당하지 않는다.
- 동시성: 여러개의 스레드가 동시에 실행될 수 있어서 작업을 병렬로 처리할 수 있다.
- 간결성: 작업을 분리할 수 있어서 코드가 간결해질 수 있다.(DispatchQueue로 분리?)
멀티 스레드의 단점
- 상호간섭: 스레드간의 간섭이 존재할 수 있다.(DispatchQueue) 예를들어 하나의 스레드안에 작업이 완료되어야만 다음 작업이 진행되고 이를 병렬처리로 하게된다면, 의도한 결과가 나오지 않을 수 있다.
- 성능 저하: 스레드를 많이 생성하면 성능 저하가 발생할 수 있다. 스레드가 병렬로 실행되기 위해 컨텍스트 스위칭이 빈번하게 발생해야 하므로 이는 성능 저하의 결과를 초래할 수 있다.
- 동기화 이슈: 여러 스레드가 공유 자원에 동시에 접근할 때, 동기화 문제가 발생할 수 있다. (Data Race Condition)
- 자원 소비: 스레드는 프로세스의 스택영역을 복사한다. 스레드 수가 많아지면 메모리 사용량도 증가하게 되고 프로세스에 할당된 메모리 양을 초과할 수 있다.